27 #include <zypp-core/parser/IniDict> 29 #undef ZYPP_BASE_LOGGER_LOGGROUP 30 #define ZYPP_BASE_LOGGER_LOGGROUP "zypp::VendorAttr" 67 static const IdString suse {
"suse" };
68 static const IdString opensuse {
"opensuse" };
74 auto isSuse = [sid,oid](
unsigned v )->
bool {
return v==sid || v==oid; };
80 std::map<unsigned,VendorList> lists;
82 lists[el.second].push_back( el.first );
85 for (
auto el : lists ) {
90 if ( fnc_r && !fnc_r( std::move(vlist) ) )
103 using VendorMatch = std::unordered_map<IdString, VendorMatchEntry>;
124 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
127 {
return new Impl( *
this ); }
176 unsigned targetId = _vendorGroupId + 1;
180 for ( std::string & vendor : vendorList_r )
184 if ( _vendorGroupMap.count( vendor ) )
186 unsigned joinId = _vendorGroupMap[vendor];
187 if ( targetId == _vendorGroupId + 1 ) {
190 else if ( targetId != joinId ) {
192 for (
auto & el : _vendorGroupMap ) {
193 if ( el.second == joinId )
194 el.second = targetId;
202 for ( std::string & vendor : vendorList_r ) {
203 if ( ! vendor.empty() )
204 _vendorGroupMap[vendor] = targetId;
207 if ( targetId == _vendorGroupId + 1 )
211 vendorMatchIdReset();
217 str <<
"Equivalent vendors:";
219 str << endl <<
" [" << p.second <<
"] " << p.first;
245 MIL <<
"Initial: " << *
this << endl;
252 MIL <<
"Initial " << initial_r <<
": " << *
this << endl;
260 if (
PathInfo pi { dirname_r }; ! pi.isDir() ) {
261 MIL <<
"Not a directory " << pi << endl;
266 [
this](
const Pathname & dir_r,
const std::string & str_r )->
bool 277 if (
PathInfo pi { filename_r }; ! pi.isFile() ) {
278 MIL <<
"Not a file " << pi << endl;
283 for (
const auto & el : dict.entries(
"main") )
285 if ( el.first ==
"vendors" )
289 [&tmp]( std::string_view word ) {
290 if ( ! word.empty() )
291 tmp.push_back( std::string(word) );
319 for (
const auto & el : list_r )
320 tmp.push_back( std::string(el) );
VendorMatch _vendorMatch
Cache mapping vendor strings to equivalence class ID.
A Solvable object within the sat Pool.
IdString vendor() const
The vendor.
std::ostream & operator<<(std::ostream &str, const VendorAttr::Impl &obj)
unsigned _nextId
Least equivalence class ID in use (decremented).
static ZConfig & instance()
Singleton ctor.
bool equivalent(const Vendor &lVendor, const Vendor &rVendor) const
Return whether two vendor strings should be treated as the same vendor.
VendorAttr()
Ctor providing the default set.
void addVendorList(VendorList &&vendorList_r)
Add a new equivalent vendor set.
RWCOW_pointer< Impl > _pimpl
Implementation class.
int dirForEach(const Pathname &dir_r, const StrMatcher &matcher_r, function< bool(const Pathname &, const char *const)> fnc_r)
String related utilities and Regular expression matching.
unsigned foreachVendorList(std::function< bool(VendorList)> fnc_r) const
Call fnc_r for each equivalent vendor list (return false to break).
bool addVendorDirectory(const Pathname &dirname_r)
Adding new equivalent vendors described in a directory.
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
Access to the sat-pools string space.
Pathname vendorPath() const
Directory for equivalent vendor definitions (configPath()/vendors.d)
void _addVendorList(VendorList &&list_r)
bool addVendorFile(const Pathname &filename_r)
Adding new equivalent vendors described in a file.
Impl * clone() const
clone for RWCOW_pointer
VendorAttr implementation.
const StrMatcher & matchNoDots()
Convenience returning StrMatcher( "[^.]*", Match::GLOB )
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \, const Trim trim_r=NO_TRIM)
Split line_r into words.
std::string trim(const std::string &s, const Trim trim_r)
static VendorAttr & noTargetInstance()
Singleton, settings used if no Target is active.
void vendorMatchIdReset()
Reset vendor match cache if _vendorGroupMap was changed.
Definition of vendor equivalence.
bool relaxedEquivalent(const Vendor &lVendor, const Vendor &rVendor) const
Like equivalent but always unifies suse and openSUSE vendor.
Integral type with defined initial value when default constructed.
bool equivalent(IdString lVendor, IdString rVendor) const
Return whether two vendor strings should be treated as equivalent.
unsigned foreachVendorList(const std::function< bool(VendorList)> &fnc_r) const
std::string toLower(const std::string &s)
Return lowercase version of s.
Parses a INI file and offers its structure as a dictionary.
friend std::ostream & operator<<(std::ostream &str, const Impl &obj)
unsigned _vendorGroupId
Highest group ID in use (incremented).
std::vector< std::string > VendorList
Preferred type to pass equivalent vendor strings.
VendorGroupMap _vendorGroupMap
Vendor group definition. Equivalent groups share the same ID.
c++17: std::string_view tools
Wrapper class for ::stat/::lstat.
Combining sat::Solvable and ResStatus.
std::string asString() const
Conversion to std::string
std::map< std::string, unsigned > VendorGroupMap
static const VendorAttr & instance()
(Pseudo)Singleton, mapped to the current Target::vendorAttr settings or to noTargetInstance.
std::unordered_map< IdString, VendorMatchEntry > VendorMatch
unsigned vendorMatchId(IdString vendor) const
Helper mapping a vendor string to its eqivalence class ID.
Easy-to use interface to the ZYPP dependency resolver.
Solvable satSolvable() const
Return the corresponding sat::Solvable.
bool relaxedEquivalent(IdString lVendor, IdString rVendor) const
Return whether two vendor strings should be treated as equivalent or are (suse/opensuse).
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.