13 #include <unordered_map>
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
60 if ( vbeg == std::string::npos )
65 for( ; vbeg != std::string::npos; vbeg = val_r.find(
"%{", vbeg ) )
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;
119 bool getAttrValue(
const std::string & key_r, Reader & reader_r, std::string & value_r )
121 const XmlString & s( reader_r->getAttribute( key_r ) );
124 value_r =
_replacer.replace( s.asString() );
125 return !value_r.empty();
143 MIL <<
"Reading " << is.
path() << endl;
162 if ( reader_r->nodeType() == XML_READER_TYPE_ELEMENT )
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);
180 if ( reader_r->name() ==
"repo" )
187 std::string attrValue;
191 if ( getAttrValue(
"alias", reader_r, attrValue ) )
194 _replacer.setVar(
"alias", attrValue );
204 getAttrValue(
"url", reader_r, urlstr );
205 getAttrValue(
"path", reader_r, pathstr );
206 if ( urlstr.empty() )
208 if ( pathstr.empty() )
211 info.
setPath( Pathname(
"/repo") / pathstr );
215 if ( pathstr.empty() )
227 if ( getAttrValue(
"name", reader_r, attrValue ) )
231 if ( getAttrValue(
"distro_target", reader_r, attrValue ) )
235 if ( getAttrValue(
"priority", reader_r, attrValue ) )
236 info.
setPriority( str::strtonum<unsigned>( attrValue ) );
240 if ( getAttrValue(
"enabled", reader_r, attrValue ) )
244 if ( getAttrValue(
"autorefresh", reader_r, attrValue ) )
270 : _pimpl(new
Impl(is, callback))
Date::Duration ttl() const
Metadata TTL (repoindex.xml:xpath:/repoindex or 0).
function< bool(const RepoInfo &)> ProcessResource
Callback definition.
ProcessResource _callback
Function for processing collected data.
void setAutorefresh(bool autorefresh)
enable or disable autorefresh
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 setEnabled(bool enabled)
enable or disable the repository
void setAlias(const std::string &alias)
set the repository alias
What is known about a repository.
void setBaseUrl(const Url &url)
Clears current base URL list and adds url.
bool enabled() const
If enabled is false, then this repository must be ignored as if does not exists, except when checking...
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
std::unordered_map< std::string, std::string > _vars
const ProcessCredentials & _callback
Interface of repoindex.xml file reader.
RepoindexFileReader(const zypp::Pathname &repoindexFile, const ProcessResource &callback)
CTOR.
void setPathName(const std::string &path, EEncoding eflag=zypp::url::E_DECODED)
Set the path name.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
~RepoindexFileReader()
DTOR.
void setPath(const Pathname &path)
set the product path.
Integral type with defined initial value when default constructed.
DefaultIntegral< Date::Duration, 0 > _ttl
void setTargetDistribution(const std::string &targetDistribution)
Sets the distribution for which is this repository meant.
bool autorefresh() const
If true, the repostory must be refreshed before creating resolvables from it.
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
Impl(const InputStream &is, const ProcessResource &callback)
CTOR.
void setName(const std::string &name)
set the repository name
bool getAttrValue(const std::string &key_r, Reader &reader_r, std::string &value_r)
bool consumeNode(Reader &reader_r)
Callback provided to the XML parser.
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl