16 #include <zypp-core/base/InputStream> 19 #include <zypp-core/parser/ParseException> 45 bool parseLine(
const std::string & line_r,
unsigned int lineNr_r );
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] ==
'#' )
127 if ( ! parseLine( *line, line.
lineNo() ) )
143 bool pastDate =
false;
144 for ( ; line; line.
next(), pd.
tick() )
146 const std::string & s = *line;
154 if ( ! parseLine( s, line.
lineNo() ) )
160 if ( logDate > date_r )
163 if ( ! parseLine( s, line.
lineNo() ) )
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 )
202 if ( ! parseLine( s, line.
lineNo() ) )
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 ); }
void readFrom(const Date &date_r, const ProgressData::ReceiverFnc &progress_r)
unsigned splitEscaped(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \, bool withEmpty=false)
Split line_r into words with respect to escape delimeters.
void sendTo(const ReceiverFnc &fnc_r)
Set ReceiverFnc.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
bool next()
Advance to next line.
std::set< std::string > _actionfilter
Zypp history file parserReads a zypp history log file and calls the ProcessData callback passed in th...
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
void readAll(const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Read the whole log file.
unsigned lineNo() const
Return the current line number.
void setIgnoreInvalidItems(bool ignoreInvalid=false)
Set the reader to ignore invalid log entries and continue with the rest.
bool toMax()
Set counter value to current max value (unless no range).
static const HistoryActionID NONE
Simple lineparser: Traverse each line in a file.
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl
void remember(const Exception &old_r)
Store an other Exception as history.
bool toMin()
Set counter value to current min value.
Store and operate on date (time_t).
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
std::string trim(const std::string &s, const Trim trim_r)
ignore invalid items and continue parsing
shared_ptr< HistoryLogData > Ptr
Maintain [min,max] and counter (value) for progress counting.
function< bool(const HistoryLogData::Ptr &)> ProcessData
Callback type to consume a single history line split into fields.
void readAll(const ProgressData::ReceiverFnc &progress_r)
static Ptr create(FieldVector &fields_r)
Factory method creating HistoryLogData classes.
void addActionFilter(const HistoryActionID &action_r)
const std::string & asString(bool pad=false) const
std::vector< std::string > FieldVector
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
void readFrom(const Date &date, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Read log from specified date.
Base class for Exception.
bool tick()
Leave counter value unchanged (still alive).
Enumeration of known history actions.
Impl(Pathname &&historyFile_r, Options &&options_r, ProcessData &&callback_r)
#define HISTORY_LOG_DATE_FORMAT
void readFromTo(const Date &fromDate, const Date &toDate, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Read log between fromDate and toDate.
Easy-to use interface to the ZYPP dependency resolver.
bool ignoreInvalidItems() const
Whether the reader is set to ignore invalid log entries.
bool parseLine(const std::string &line_r, unsigned int lineNr_r)
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_r, const Date &toDate_r, const ProgressData::ReceiverFnc &progress_r)
void addActionFilter(const HistoryActionID &action_r)
Process only specific HistoryActionIDs.