13#include <unordered_map>
15#include <zypp/base/String.h>
16#include <zypp/base/Logger.h>
17#include <zypp/base/Gettext.h>
18#include <zypp-core/base/InputStream>
19#include <zypp-core/base/DefaultIntegral>
21#include <zypp/Pathname.h>
24#include <zypp-core/parser/ParseException>
31#undef ZYPP_BASE_LOGGER_LOGGROUP
32#define ZYPP_BASE_LOGGER_LOGGROUP "parser"
50 void setVar(
const std::string & key_r,
const std::string & val_r )
53 _vars[key_r] = replace( val_r );
57 std::string replace(
const std::string & val_r )
const
59 std::string::size_type vbeg = val_r.find(
"%{", 0 );
60 if ( vbeg == std::string::npos )
64 std::string::size_type cbeg = 0;
65 for( ; vbeg != std::string::npos; vbeg = val_r.find(
"%{", vbeg ) )
67 std::string::size_type nbeg = vbeg+2;
68 std::string::size_type nend = val_r.find(
"}", nbeg );
69 if ( nend == std::string::npos )
71 WAR <<
"Incomplete variable in '" << val_r <<
"'" << endl;
74 const auto & iter =
_vars.find( val_r.substr( nbeg, nend-nbeg ) );
75 if ( iter !=
_vars.end() )
78 ret << val_r.substr( cbeg, vbeg-cbeg );
83 WAR <<
"Undefined variable %{" << val_r.substr( nbeg, nend-nbeg ) <<
"} in '" << val_r <<
"'" << endl;
86 if ( cbeg < val_r.size() )
87 ret << val_r.substr( cbeg );
92 std::unordered_map<std::string,std::string>
_vars;
139 const ProcessResource & callback)
143 MIL <<
"Reading " <<
is.path() << endl;
165 if (
reader_r->name() ==
"repoindex" )
167 while (
reader_r.nextNodeAttribute() )
169 const std::string & name(
reader_r->localName().asString() );
170 const std::string & value(
reader_r->value().asString() );
171 _replacer.setVar( name, value );
174 _ttl = str::strtonum<Date::Duration>(value);
std::unordered_map< std::string, std::string > _vars
Interface of repoindex.xml file reader.
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
What is known about a repository.
void setBaseUrl(const Url &url)
Clears current base URL list and adds url.
void setTargetDistribution(const std::string &targetDistribution)
Sets the distribution for which is this repository meant.
void setPath(const Pathname &path)
set the product path.
void setPriority(unsigned newval_r)
Set repository priority for solver.
std::string getPathName(EEncoding eflag=zypp::url::E_DECODED) const
Returns the path name from the URL.
void setPathName(const std::string &path, EEncoding eflag=zypp::url::E_DECODED)
Set the path name.
DefaultIntegral< Date::Duration, 0 > _ttl
bool consumeNode(Reader &reader_r)
Callback provided to the XML parser.
Impl(const InputStream &is, const ProcessResource &callback)
CTOR.
ProcessResource _callback
Function for processing collected data.
bool getAttrValue(const std::string &key_r, Reader &reader_r, std::string &value_r)
function< bool(const RepoInfo &) ProcessResource)
Callback definition.
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl
RepoindexFileReader(const zypp::Pathname &repoindexFile, const ProcessResource &callback)
CTOR.
Date::Duration ttl() const
Metadata TTL (repoindex.xml:xpath:/repoindex@ttl or 0).
~RepoindexFileReader()
DTOR.
void setAutorefresh(bool autorefresh)
enable or disable autorefresh
void setAlias(const std::string &alias)
set the repository alias
void setName(const std::string &name)
set the repository name
bool autorefresh() const
If true, the repostory must be refreshed before creating resolvables from it.
bool enabled() const
If enabled is false, then this repository must be ignored as if does not exists, except when checking...
void setEnabled(bool enabled)
enable or disable the repository
xmlTextReader based interface to iterate xml streams.
const ProcessCredentials & _callback
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
Easy-to use interface to the ZYPP dependency resolver.