13 #include <unordered_map> 19 #include <zypp-core/base/InputStream> 20 #include <zypp-core/base/DefaultIntegral> 25 #include <zypp-core/parser/ParseException> 32 #undef ZYPP_BASE_LOGGER_LOGGROUP 33 #define ZYPP_BASE_LOGGER_LOGGROUP "parser" 51 void setGlobalVar(
const std::string & key_r,
const std::string & val_r )
52 {
_global[key_r] = replace( val_r ); }
55 void setSectionVar(
const std::string & key_r,
const std::string & val_r )
56 {
_section[key_r] = replace( val_r ); }
59 void clearSectionVars()
62 std::string replace(
const std::string & val_r )
const 65 if ( vbeg == std::string::npos )
70 for( ; vbeg != std::string::npos; vbeg = val_r.find(
"%{", vbeg ) )
74 if ( nend == std::string::npos )
76 WAR <<
"Incomplete variable in '" << val_r <<
"'" << endl;
79 const std::string * varptr = getVar( val_r.substr( nbeg, nend-nbeg ) );
83 ret << val_r.substr( cbeg, vbeg-cbeg );
88 WAR <<
"Undefined variable %{" << val_r.substr( nbeg, nend-nbeg ) <<
"} in '" << val_r <<
"'" << endl;
91 if ( cbeg < val_r.size() )
92 ret << val_r.substr( cbeg );
98 const std::string * getVar(
const std::string & key_r )
const 100 const std::string * ret = getVar( key_r,
_section );
102 ret = getVar( key_r,
_global );
106 const std::string * getVar(
const std::string & key_r,
const std::unordered_map<std::string,std::string> & map_r )
const 108 const auto & iter = map_r.find( key_r );
109 if ( iter != map_r.end() )
110 return &(iter->second);
115 std::unordered_map<std::string,std::string>
_global;
116 std::unordered_map<std::string,std::string>
_section;
148 value_r =
_replacer.replace( s.asString() );
149 return !value_r.empty();
167 MIL <<
"Reading " << is.
path() << endl;
186 if ( reader_r->
nodeType() == XML_READER_TYPE_ELEMENT )
189 if ( reader_r->
name() ==
"repoindex" )
195 _replacer.setGlobalVar( name, value );
198 _ttl = str::strtonum<Date::Duration>(value);
204 if ( reader_r->
name() ==
"repo" )
216 std::string attrValue;
217 _replacer.clearSectionVars();
221 if ( getAttrValue(
"alias", reader_r, attrValue ) )
224 _replacer.setSectionVar(
"alias", attrValue );
234 getAttrValue(
"url", reader_r, urlstr );
235 getAttrValue(
"path", reader_r, pathstr );
236 if ( urlstr.empty() )
238 if ( pathstr.empty() )
249 if ( pathstr.empty() )
257 _replacer.setSectionVar(
"url", urlstr );
262 if ( getAttrValue(
"name", reader_r, attrValue ) )
266 if ( getAttrValue(
"distro_target", reader_r, attrValue ) )
270 if ( getAttrValue(
"priority", reader_r, attrValue ) )
271 info.
setPriority( str::strtonum<unsigned>( attrValue ) );
274 if ( getAttrValue(
"enabled", reader_r, attrValue ) )
278 if ( getAttrValue(
"autorefresh", reader_r, attrValue ) )
282 if ( getAttrValue(
"gpgcheck", reader_r, attrValue ) )
284 if ( getAttrValue(
"repo_gpgcheck", reader_r, attrValue ) )
286 if ( getAttrValue(
"pkg_gpgcheck", reader_r, attrValue ) )
290 if ( getAttrValue(
"keeppackages", reader_r, attrValue ) )
294 if ( getAttrValue(
"gpgkey", reader_r, attrValue ) )
298 if ( getAttrValue(
"mirrorlist", reader_r, attrValue ) )
302 if ( getAttrValue(
"metalink", reader_r, attrValue ) )
312 "url",
"mirrorlist",
"metalink", info.
alias().c_str()));
337 : _pimpl(new
Impl( is,
std::move(callback) ))
void setBaseUrl(Url url)
Clears current base URL list and adds url.
Pathname path() const
Repository path.
void setGpgKeyUrl(const Url &gpgkey)
(leagcy API) Set the gpgkey URL defined for this repo
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.
function< bool(const RepoInfo &)> ProcessResource
Callback definition.
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
RepoindexFileReader(Pathname repoindexFile, ProcessResource callback)
CTOR.
void setAlias(const std::string &alias)
set the repository alias
What is known about a repository.
void setGpgCheck(TriBool value_r)
Set the value for gpgCheck (or indeterminate to use the default).
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 > _global
Interface of repoindex.xml file reader.
bool baseUrlsEmpty() const
whether repository urls are available
TriBool strToTriBool(const C_Str &str)
Parse str into a bool if it's a legal true or false string; else indeterminate.
void setMirrorlistUrl(const Url &url)
Set the raw mirrorlist url.
Url mirrorListUrl() const
Url of a file which contains a list of repository urls.
bool empty() const
Test for an empty path.
void setPathName(const std::string &path, EEncoding eflag=zypp::url::E_DECODED)
Set the path name.
XmlString getAttribute(const char *name_r) const
Provides a copy of the attribute value with the specified qualified name.
void setRepoGpgCheck(TriBool value_r)
Set the value for repoGpgCheck (or indeterminate to use the default).
std::string alias() const
unique identifier for this source.
~RepoindexFileReader()
DTOR.
void setPath(const Pathname &path)
set the product path.
std::unordered_map< std::string, std::string > _section
void setKeepPackages(bool keep)
Set if packaqes downloaded from this repository will be kept in local cache.
bool isValid() const
Verifies the Url.
DefaultIntegral< Date::Duration, 0 > _ttl
const ProcessCredentials & _callback
void setMetalinkUrl(const Url &url)
Set the raw metalink url.
Impl(const InputStream &is, ProcessResource &&callback)
CTOR.
bool foreachNode(const ProcessNode &fnc_r)
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.
XmlString name() const
The qualified name of the node, equal to Prefix :LocalName.
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
void setPkgGpgCheck(TriBool value_r)
Set the value for pkgGpgCheck (or indeterminate to use the default).
XmlString localName() const
The local name of the node.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
bool strToTrue(const C_Str &str)
Parsing boolean from string.
xmlTextReader based interface to iterate xml streams.