15#include <zypp-core/base/InputStream>
16#include <zypp/base/IOStream.h>
17#include <zypp/base/Logger.h>
18#include <zypp-core/parser/ParseException>
44 bool parseLine(
const std::string & line_r,
unsigned int lineNr_r );
70 if ( fields.size() < 2 ) {
71 WAR <<
"Ignore invalid history log entry on line #" << lineNr_r <<
" '"<< line_r <<
"'" << endl;
74 fields[1] =
str::trim( std::move(fields[1]) );
90 WAR <<
"Ignore invalid history log entry on line #" << lineNr_r <<
" '"<< line_r <<
"'" << endl;
95 ERR <<
"Invalid history log entry on line #" << lineNr_r <<
" '"<< line_r <<
"'" << endl;
105 WAR <<
"Stop parsing requested by consumer callback on line #" << lineNr_r << endl;
120 for ( ; line; line.
next(), pd.
tick() )
123 if ( (*line)[0] ==
'#' )
126 if ( ! parseLine( *line, line.
lineNo() ) )
142 bool pastDate =
false;
143 for ( ; line; line.
next(), pd.
tick() )
145 const std::string & s = *line;
153 if ( ! parseLine( s, line.
lineNo() ) )
159 if ( logDate > date_r )
162 if ( ! parseLine( s, line.
lineNo() ) )
180 bool pastFromDate =
false;
181 for ( ; line; line.
next(), pd.
tick() )
183 const std::string & s = *line;
192 if ( logDate >= toDate_r )
196 if ( !pastFromDate && logDate > fromDate_r )
201 if ( ! parseLine( s, line.
lineNo() ) )
229 {
_pimpl->readAll( progress_r ); }
232 {
_pimpl->readFrom( date_r, progress_r ); }
235 {
_pimpl->readFromTo( fromDate_r, toDate_r, progress_r ); }
238 {
_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.
shared_ptr< HistoryLogData > Ptr
static Ptr create(FieldVector &fields_r)
Factory method creating HistoryLogData classes.
std::vector< std::string > FieldVector
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.
Zypp history file parser.
@ IGNORE_INVALID_ITEMS
ignore invalid items and continue parsing
function< bool(const HistoryLogData::Ptr &)> ProcessData
Callback type to consume a single history line split into fields.
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.
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(const Pathname &historyFile_r, const Options &options_r, const 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
static const HistoryActionID NONE
std::set< std::string > _actionfilter
void addActionFilter(const HistoryActionID &action_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)
Impl(const Pathname &historyFile_r, const Options &options_r, const ProcessData &callback_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.