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>;
 
  127    { 
return new Impl( *
this ); }
 
 
 
  180    for ( std::string & vendor : vendorList_r )
 
  190        else if ( targetId != joinId ) {
 
  193            if ( el.second == joinId )
 
  194              el.second = targetId;
 
  202    for ( std::string & vendor : vendorList_r ) {
 
  203      if ( ! vendor.empty() )
 
 
  217    str << 
"Equivalent vendors:";
 
  219      str << endl << 
"   [" << p.second << 
"] " << p.first;
 
 
  245    MIL << 
"Initial: " << *
this << endl;
 
 
  252    MIL << 
"Initial " << initial_r << 
": " << *
this << endl;
 
 
  261      MIL << 
"Not a directory " << pi << endl;
 
  266                            [
this]( 
const Pathname & dir_r, 
const std::string & str_r )->
bool 
 
  278      MIL << 
"Not a file " << pi << endl;
 
  283    for ( 
const auto & el : dict.
entries(
"main") )
 
  285      if ( el.first == 
"vendors" )
 
  288        strv::split( el.second, 
",", strv::Trim::trim,
 
  289                     [&tmp]( std::string_view word ) {
 
  290                       if ( ! word.empty() )
 
  291                         tmp.push_back( std::string(word) );
 
 
  301  { 
_pimpl->addVendorList( std::move(vendorList_r) ); }
 
 
  304  { 
return _pimpl->foreachVendorList( std::move(fnc_r) ); }
 
 
  311  { 
return _pimpl->equivalent( lVendor, rVendor );}
 
 
  324  { 
return _pimpl->relaxedEquivalent( lVendor, rVendor );}
 
 
Integral type with defined initial value when default constructed.
Access to the sat-pools string space.
const char * c_str() const
Conversion to const char *
std::string asString() const
Conversion to std::string
Combining sat::Solvable and ResStatus.
VendorAttr implementation.
bool relaxedEquivalent(IdString lVendor, IdString rVendor) const
Return whether two vendor strings should be treated as equivalent or are (suse/opensuse).
VendorMatch _vendorMatch
Cache mapping vendor strings to equivalence class ID.
std::map< std::string, unsigned > VendorGroupMap
unsigned vendorMatchId(IdString vendor) const
Helper mapping a vendor string to its eqivalence class ID.
bool equivalent(IdString lVendor, IdString rVendor) const
Return whether two vendor strings should be treated as equivalent.
DefaultIntegral< unsigned int, 0 > VendorMatchEntry
Impl * clone() const
clone for RWCOW_pointer
void vendorMatchIdReset()
Reset vendor match cache if _vendorGroupMap was changed.
friend Impl * rwcowClone(const Impl *rhs)
VendorGroupMap _vendorGroupMap
Vendor group definition. Equivalent groups share the same ID.
std::ostream & operator<<(std::ostream &str, const VendorAttr::Impl &obj)
Stream output.
friend std::ostream & operator<<(std::ostream &str, const Impl &obj)
unsigned _nextId
Least equivalence class ID in use (decremented).
unsigned _vendorGroupId
Highest group ID in use (incremented).
unsigned foreachVendorList(const std::function< bool(VendorList)> &fnc_r) const
std::unordered_map< IdString, VendorMatchEntry > VendorMatch
void addVendorList(VendorList &&vendorList_r)
Add a new equivalent vendor set.
VendorAttr()
Ctor providing the default set.
static VendorAttr & noTargetInstance()
Singleton, settings used if no Target is active.
bool equivalent(const Vendor &lVendor, const Vendor &rVendor) const
Return whether two vendor strings should be treated as the same vendor.
std::vector< std::string > VendorList
Preferred type to pass equivalent vendor strings.
bool addVendorFile(const Pathname &filename_r)
Adding new equivalent vendors described in a file.
RWCOW_pointer< Impl > _pimpl
Implementation class.
unsigned foreachVendorList(std::function< bool(VendorList)> fnc_r) const
Call fnc_r for each equivalent vendor list (return false to break).
bool relaxedEquivalent(const Vendor &lVendor, const Vendor &rVendor) const
Like equivalent but always unifies suse and openSUSE vendor.
static const VendorAttr & instance()
(Pseudo)Singleton, mapped to the current Target::vendorAttr settings or to noTargetInstance.
void _addVendorList(VendorList &&list_r)
bool addVendorDirectory(const Pathname &dirname_r)
Adding new equivalent vendors described in a directory.
Pathname vendorPath() const
Directory for equivalent vendor definitions (configPath()/vendors.d)
static ZConfig & instance()
Singleton ctor.
ZYpp::Ptr getZYpp()
Convenience to get the Pointer to the ZYpp instance.
Wrapper class for stat/lstat.
Parses a INI file and offers its structure as a dictionary.
Iterable< entry_const_iterator > entries(const std::string §ion) const
A Solvable object within the sat Pool.
IdString vendor() const
The vendor.
String related utilities and Regular expression matching.
const StrMatcher & matchNoDots()
Convenience returning StrMatcher( "[^.]*", Match::GLOB )
int dirForEach(const Pathname &dir_r, const StrMatcher &matcher_r, function< bool(const Pathname &, const char *const)> fnc_r)
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
std::string toLower(const std::string &s)
Return lowercase version of s.
Easy-to use interface to the ZYPP dependency resolver.
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
Solvable satSolvable() const
Return the corresponding sat::Solvable.
c++17: std::string_view tools