37 class RepoFileParser :
public IniDict
40 RepoFileParser(
const InputStream & is_r )
45 virtual void consume(
const std::string & section_r,
const std::string & key_r,
const std::string & value_r )
47 if ( key_r ==
"baseurl" )
50 _baseurls[section_r].push_back( Url(value_r) );
52 else if ( key_r ==
"gpgkey" )
55 legacyStoreUrl(
_gpgkeys[section_r], value_r );
64 virtual void garbageLine(
const std::string & section_r,
const std::string & line_r )
68 case MultiLine::baseurl:
69 _baseurls[section_r].push_back( Url(line_r) );
72 case MultiLine::gpgkey:
73 legacyStoreUrl(
_gpgkeys[section_r], line_r );
82 std::list<Url> & baseurls(
const std::string & section_r )
85 std::list<Url> & gpgkeys(
const std::string & section_r )
89 void legacyStoreUrl( std::list<Url> & store_r,
const std::string & line_r )
96 std::vector<std::string> keys;
97 str::split( line_r, std::back_inserter(keys) );
98 for (
auto && str : keys )
99 store_r.push_back( Url(std::move(str)) );
102 enum class MultiLine { none, baseurl, gpgkey };
120 RepoFileParser dict(is);
121 for_( its, dict.sectionsBegin(), dict.sectionsEnd() )
126 std::string proxyport;
128 for_( it, dict.entriesBegin(*its), dict.entriesEnd(*its) )
131 if (it->first ==
"name" )
133 else if ( it->first ==
"enabled" )
135 else if ( it->first ==
"priority" )
136 info.
setPriority( str::strtonum<unsigned>( it->second ) );
137 else if ( it->first ==
"path" )
138 info.
setPath( Pathname(it->second) );
139 else if ( it->first ==
"type" )
141 else if ( it->first ==
"autorefresh" )
143 else if ( it->first ==
"mirrorlist" && !it->second.empty())
145 else if ( it->first ==
"metalink" && !it->second.empty())
147 else if ( it->first ==
"gpgcheck" )
149 else if ( it->first ==
"repo_gpgcheck" )
151 else if ( it->first ==
"pkg_gpgcheck" )
153 else if ( it->first ==
"keeppackages" )
155 else if ( it->first ==
"service" )
157 else if ( it->first ==
"proxy" )
166 proxy = it->second.substr( 0, it->second.size() - what[0].
size() );
167 proxyport = what[0].substr( 1 );
175 ERR <<
"Unknown attribute in [" << *its <<
"]: " << it->first <<
"=" << it->second <<
" ignored" << endl;
178 for (
auto &
url : dict.baseurls( *its ) )
180 if ( ! proxy.empty() &&
url.getQueryParam(
"proxy" ).empty() )
182 url.setQueryParam(
"proxy", proxy );
183 url.setQueryParam(
"proxyport", proxyport );