16#include <zypp-core/base/InputStream> 
   19#include <zypp-core/parser/ParseException> 
   45    bool parseLine( 
const std::string & line_r, 
unsigned int lineNr_r );
 
   53      if ( action_r == HistoryActionID::NONE )
 
 
 
   71    if ( fields.size() < 2 ) {
 
   72      WAR << 
"Ignore invalid history log entry on line #" << lineNr_r << 
" '"<< line_r << 
"'" << endl;
 
   75    fields[1] = 
str::trim( std::move(fields[1]) );     
 
   91        WAR << 
"Ignore invalid history log entry on line #" << lineNr_r << 
" '"<< line_r << 
"'" << endl;
 
   96        ERR << 
"Invalid history log entry on line #" << lineNr_r << 
" '"<< line_r << 
"'" << endl;
 
  106      WAR << 
"Stop parsing requested by consumer callback on line #" << lineNr_r << endl;
 
 
  121    for ( ; line; line.
next(), pd.
tick() )
 
  124      if ( (*line)[0] == 
'#' )
 
 
  143    bool pastDate = 
false;
 
  144    for ( ; line; line.
next(), pd.
tick() )
 
  146      const std::string & s = *line;
 
  160        if ( logDate > date_r )
 
 
  181    bool pastFromDate = 
false;
 
  182    for ( ; line; line.
next(), pd.
tick() )
 
  184      const std::string & s = *line;
 
  193      if ( logDate >= toDate_r )
 
  197      if ( !pastFromDate && logDate > fromDate_r )
 
 
  230  { 
_pimpl->readAll( progress_r ); }
 
 
  233  { 
_pimpl->readFrom( date_r, progress_r ); }
 
 
  236  { 
_pimpl->readFromTo( fromDate_r, toDate_r, progress_r ); }
 
 
  239  { 
_pimpl->addActionFilter( action_r ); }
 
 
 
#define HISTORY_LOG_DATE_FORMAT
Store and operate on date (time_t).
Base class for Exception.
void remember(const Exception &old_r)
Store an other Exception as history.
static Ptr create(FieldVector &fields_r)
Factory method creating HistoryLogData classes.
std::vector< std::string > FieldVector
shared_ptr< HistoryLogData > Ptr
Maintain [min,max] and counter (value) for progress counting.
bool tick()
Leave counter value unchanged (still alive).
void sendTo(const ReceiverFnc &fnc_r)
Set ReceiverFnc.
bool toMax()
Set counter value to current max value (unless no range).
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
bool toMin()
Set counter value to current min value.
Simple lineparser: Traverse each line in a file.
unsigned lineNo() const
Return the current line number.
bool next()
Advance to next line.
@ IGNORE_INVALID_ITEMS
ignore invalid items and continue parsing
void setIgnoreInvalidItems(bool ignoreInvalid=false)
Set the reader to ignore invalid log entries and continue with the rest.
void readFrom(const Date &date, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Read log from specified date.
function< bool(const HistoryLogData::Ptr &)> ProcessData
Callback type to consume a single history line split into fields.
void addActionFilter(const HistoryActionID &action_r)
Process only specific HistoryActionIDs.
bool ignoreInvalidItems() const
Whether the reader is set to ignore invalid log entries.
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl
void readAll(const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Read the whole log file.
HistoryLogReader(Pathname historyFile_r, zypp::parser::HistoryLogReader::Options options_r, ProcessData callback_r)
Ctor taking file to parse and data consumer callback.
void readFromTo(const Date &fromDate, const Date &toDate, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Read log between fromDate and toDate.
unsigned splitEscaped(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t", bool withEmpty=false)
Split line_r into words with respect to escape delimeters.
std::string trim(const std::string &s, const Trim trim_r)
Easy-to use interface to the ZYPP dependency resolver.
Enumeration of known history actions.
const std::string & asString(bool pad=false) const
std::set< std::string > _actionfilter
void addActionFilter(const HistoryActionID &action_r)
Impl(Pathname &&historyFile_r, Options &&options_r, ProcessData &&callback_r)
void readFromTo(const Date &fromDate_r, const Date &toDate_r, const ProgressData::ReceiverFnc &progress_r)
bool parseLine(const std::string &line_r, unsigned int lineNr_r)
void readFrom(const Date &date_r, const ProgressData::ReceiverFnc &progress_r)
void readAll(const ProgressData::ReceiverFnc &progress_r)
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.