17#include <zypp/base/Logger.h>
18#include <zypp/base/String.h>
21#include <zypp/PathInfo.h>
32 void recursiveTimestamp(
const Pathname & dir_r, time_t & max_r )
34 std::list<std::string> dircontent;
38 for_( it, dircontent.begin(), dircontent.end() )
43 if ( pi.mtime() > max_r )
45 recursiveTimestamp( pi.path(), max_r );
71 if ( !checksum_r.empty() ) {
72 static const std::string magic(
"43" );
80 void inject( std::string && checksum_r,
Date && timestamp_r )
82 if ( !checksum_r.empty() ) {
119 std::stringstream ss;
143 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
146 {
return new Impl( *
this ); }
157 : _pimpl( new
Impl() )
161 : _pimpl( new
Impl() )
170 else if ( info.
isDir() )
172 time_t t = info.
mtime();
173 recursiveTimestamp( path_r, t );
180 : _pimpl( new
Impl() )
186 : _pimpl( new
Impl() )
188 _pimpl->assignFromCtor( std::move(checksum_r), std::move(timestamp_r) );
197 std::ifstream file( path_r.
c_str() );
200 WAR <<
"No cookie file " << path_r << endl;
207 ret.
_pimpl->inject( std::move(line), std::move(stmp) );
214 std::ofstream file(path_r.
c_str());
218 file <<
_pimpl->checksum() <<
" " << time_t(
_pimpl->timestamp()) << endl;
223 {
return _pimpl->empty(); }
226 {
return _pimpl->timestamp(); }
239 {
return lhs.
_pimpl->checksum() == rhs.
_pimpl->checksum(); }
static CheckSum sha1FromString(const std::string &input_r)
static CheckSum sha1(const std::string &checksum)
std::string checksum() const
Store and operate on date (time_t).
Base class for Exception.
What is known about a repository.
Url url() const
Pars pro toto: The first repository url.
Track changing files or directories.
RWCOW_pointer< Impl > _pimpl
Implementation.
static RepoStatus fromCookieFile(const Pathname &path)
Reads the status from a cookie file.
Date timestamp() const
The time the data were changed the last time.
bool empty() const
Whether the status is empty (empty checksum)
RepoStatus()
Default ctor.
void saveToCookieFile(const Pathname &path_r) const
Save the status information to a cookie file.
std::string asString() const
Returns a default string representation of the Url object.
Wrapper class for ::stat/::lstat.
bool isExist() const
Return whether valid stat info exists.
const char * c_str() const
String representation.
const std::string & asString() const
String representation.
String related utilities and Regular expression matching.
std::string checksum(const Pathname &file, const std::string &algorithm)
Compute a files checksum.
int readdir(std::list< std::string > &retlist_r, const Pathname &path_r, bool dots_r)
Return content of directory via retlist.
std::string sha1sum(const Pathname &file)
Compute a files sha1sum.
std::string stripLastWord(std::string &line, const bool rtrim_first)
std::string numstring(char n, int w=0)
std::string getline(std::istream &str, const Trim trim_r)
Return stream content up to (but not returning) the next newline.
Easy-to use interface to the ZYPP dependency resolver.
bool operator==(const SetRelation::Enum &lhs, const SetCompare &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
RepoStatus operator&&(const RepoStatus &lhs, const RepoStatus &rhs)
RepoStatus implementation.
void assignFromCtor(std::string &&checksum_r, Date &×tamp_r)
Assign data called from RepoStatus ctor (adds magic).
std::string checksum() const
void injectFrom(const Impl &rhs)
Inject the raw data from rhs.
std::ostream & dumpOn(std::ostream &str) const
Dump to log file (not to/from CookieFile).
std::set< std::string > Checksums
std::optional< std::string > _cachedchecksum
void inject(std::string &&checksum_r, Date &×tamp_r)
Inject raw data (no magic added).
Impl * clone() const
clone for RWCOW_pointer
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.