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 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;
124 value_r =
_replacer.replace( s.asString() );
125 return !value_r.empty();
140 : _callback(callback)
143 MIL <<
"Reading " << is.
path() << endl;
162 if ( reader_r->
nodeType() == XML_READER_TYPE_ELEMENT )
165 if ( reader_r->
name() ==
"repoindex" )
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() )
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))
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.
NodeType nodeType() const
Get the node type of the current node.
XmlString value() const
Provides the text value of the node if present.
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.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
bool enabled() const
If enabled is false, then this repository must be ignored as if does not exists, except when checking...
std::unordered_map< std::string, std::string > _vars
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.
XmlString getAttribute(const char *name_r) const
Provides a copy of the attribute value with the specified qualified name.
~RepoindexFileReader()
DTOR.
void setPath(const Pathname &path)
set the product path.
DefaultIntegral< Date::Duration, 0 > _ttl
void setTargetDistribution(const std::string &targetDistribution)
Sets the distribution for which is this repository meant.
std::string getPathName(EEncoding eflag=zypp::url::E_DECODED) const
Returns the path name from the URL.
std::string asString() const
Explicit conversion to std::string.
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
bool foreachNode(ProcessNode fnc_r)
XmlString name() const
The qualified name of the node, equal to Prefix :LocalName.
Impl(const InputStream &is, const ProcessResource &callback)
CTOR.
Date::Duration ttl() const
Metadata TTL (repoindex.xml:xpath:/repoindex or 0).
bool autorefresh() const
If true, the repostory must be refreshed before creating resolvables from it.
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.
Easy-to use interface to the ZYPP dependency resolver.
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl
XmlString localName() const
The local name of the node.
xmlTextReader based interface to iterate xml streams.