28#include <zypp-core/OnMediaLocation>
44 void _doSplit( IdString & _ident, ResKind & _kind, IdString & _name )
63 _name =
IdString( ::strchr( _ident.c_str(),
':' )+1 );
110#define NO_SOLVABLE_RETURN( VAL ) \
111 detail::CSolvable * _solvable( get() ); \
112 if ( ! _solvable ) return VAL
123 if ( nextS && nextS->repo == _solvable->repo )
134 const char * s = ::solvable_lookup_str( _solvable, attr.
id() );
135 return s ? s : std::string();
144 s = ::solvable_lookup_str_poollang( _solvable, attr.
id() );
150 if ( (s = ::solvable_lookup_str_lang( _solvable, attr.
id(), l.c_str(), 0 )) )
154 s = ::solvable_lookup_str_lang( _solvable, attr.
id(), 0, 0 );
156 return s ? s : std::string();
162 return ::solvable_lookup_num( _solvable, attr.
id(), 0 );
168 return ::solvable_lookup_num( _solvable, attr.
id(), notfound_r );
174 return ::solvable_lookup_bool( _solvable, attr.
id() );
180 return ::solvable_lookup_id( _solvable, attr.
id() );
187 const char * s = ::solvable_lookup_checksum( _solvable, attr.
id(), &chksumtype );
190 switch ( chksumtype )
199 return CheckSum( std::string(), s );
207 static const SolvAttr susetagsDatadir(
"susetags:datadir" );
212 if ( ! datadir.empty() )
216 LookupAttr datadir( susetagsDatadir, repor_r );
217 if ( ! datadir.empty() )
229 unsigned medianr = 0;
230 const char * file = ::solvable_lookup_location( _solvable, &medianr );
239 switch (
repository().info().type().toEnum() )
244 if ( ! path.
empty() )
280 switch ( _solvable->arch )
295 const char * sep = ::strchr(
ident,
':' );
308 switch ( _solvable->arch )
320 return( ::strchr(
ident,
':' ) == 0 );
325 unsigned ksize = ::strlen(
kind );
326 return( ::strncmp(
ident,
kind, ksize ) == 0
327 &&
ident[ksize] ==
':' );
334 const char * sep = ::strchr(
ident,
':' );
335 return( sep ? sep+1 :
ident );
341 return Edition( _solvable->evr );
347 switch ( _solvable->arch )
361 return IdString( _solvable->vendor );
472 return rhssolvable && ( _solvable == rhssolvable || ::solvable_identical( _solvable, rhssolvable ) );
488 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_provides );
493 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_requires );
498 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_conflicts );
503 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_obsoletes );
508 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_recommends );
513 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_suggests );
518 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_enhances );
523 return _getCapabilities( _solvable->repo->idarraydata, _solvable->dep_supplements );
529 ::Offset offs = _solvable->dep_requires;
534#if __cplusplus < 202002L
535#define DECLARE_CAP_FWD(_Fnc_Name) \
536 Capabilities Solvable::_Fnc_Name() const \
537 { return dep_##_Fnc_Name(); }
548#undef DECLARE_CAP_FWD
575 std::string value( caprep.
name().
c_str()+namespace_r.size()+1 );
576 value[value.size()-1] =
'\0';
586 int res = solvable_matchessolvable(
get(), attr.
id(),
static_cast<Id
>( solv.
id() ), capQueue, 0 );
589 if ( capQueue.
size() )
590 std::for_each( capQueue.
begin(), capQueue.
end(), [ &caps ](
auto cap ){ caps.insert( Capability(cap) );});
592 return std::make_pair( res == 1, std::move(caps) );
602 int invokeOnEachSupportedLocale(
Capability cap_r,
const function<
bool (
const Locale &)>& fnc_r )
607 switch (
detail.capRel() )
613 int res = invokeOnEachSupportedLocale(
detail.lhs(), fnc_r );
616 int res2 = invokeOnEachSupportedLocale(
detail.rhs(), fnc_r );
624 if (
detail.lhs().id() == NAMESPACE_LANGUAGE )
641 inline int invokeOnEachSupportedLocale( Capabilities cap_r,
const function<
bool (Locale)>& fnc_r )
644 for_( cit, cap_r.begin(), cap_r.end() )
646 int res = invokeOnEachSupportedLocale( *cit, fnc_r );
658 NoMatchIn(
const LocaleSet & locales_r ) : _locales( locales_r ) {}
660 bool operator()(
const Locale & locale_r )
const
662 return _locales.find( locale_r ) == _locales.end();
679 return invokeOnEachSupportedLocale(
dep_supplements(), bind( std::not_equal_to<Locale>(), locale_r, _1 ) ) < 0;
684 if ( locales_r.empty() )
687 return invokeOnEachSupportedLocale(
dep_supplements(), NoMatchIn(locales_r) ) < 0;
710 unsigned medianr = 0U;
711 const char * file = ::solvable_lookup_location( _solvable, &medianr );
714 else if ( ! medianr )
768 std::string riname(
name() );
784 std::string riname(
name() );
797 return str << (obj.
isSystem() ?
"systemSolvable" :
"noSolvable" );
799 return str <<
"(" << obj.
id() <<
")"
801 <<
'-' << obj.
edition() <<
'.' << obj.
arch() <<
"("
810#define OUTS(X) if ( ! obj[Dep::X].empty() ) str << endl << " " #X " " << obj[Dep::X]
#define DECLARE_CAP_FWD(_Fnc_Name)
#define NO_SOLVABLE_RETURN(VAL)
bool operator()(const zypp::Arch &lhs, const zypp::Arch &rhs) const
Default order for std::container based Arch::compare.
Store and operate with byte count.
Convenience char* constructible from std::string and char*, it maps (char*)0 to an empty string.
Helper providing more detailed information about a Capability.
Container of Capability (currently read only).
const_iterator begin() const
Iterator pointing to the first Capability.
const_iterator end() const
Iterator pointing behind the last Capability.
static CheckSum md5(const std::string &checksum)
static CheckSum sha384(const std::string &checksum)
static CheckSum sha1(const std::string &checksum)
static CheckSum sha512(const std::string &checksum)
static CheckSum sha256(const std::string &checksum)
static CheckSum sha224(const std::string &checksum)
Common Platform Enumearation (2.3) See http://cpe.mitre.org/ for more information on the Common Platf...
static constexpr NoThrowType noThrow
Indicator argument for non-trowing ctor.
Store and operate on date (time_t).
Edition represents [epoch:]version[-release]
const char * c_str() const
Access to the sat-pools string space.
const char * c_str() const
Conversion to const char *
std::string asString() const
Conversion to std::string
'Language[_Country]' codes.
Locale fallback() const
Return the fallback locale for this locale, if no fallback exists the empty Locale::noCode.
What is known about a repository.
std::string getLicense(const Locale &lang_r=Locale()) const
Return the best license for the current (or a specified) locale.
void setProbedType(const repo::RepoType &t) const
This allows to adjust the RepoType lazy, from NONE to some probed value, even for const objects.
bool needToAcceptLicense() const
Whether the repo license has to be accepted, e.g.
bool hasLicense() const
Whether there is a license associated with the repo.
static const Repository noRepository
Represents no Repository.
std::string alias() const
Short unique string to identify a repo.
RepoInfo info() const
Return any associated RepoInfo.
static const ResKind srcpackage
static ResKind explicitBuiltin(const char *str_r)
Return the builtin kind if str_r explicitly prefixed.
static const ResKind package
const std::string & asString() const
String representation.
bool empty() const
Test for an empty path.
Lightweight attribute value lookup.
Lightweight repository attribute value lookup.
Libsolv Id queue wrapper.
const_iterator end() const
const_iterator begin() const
static const SolvAttr cpeid
static const SolvAttr buildtime
static const SolvAttr distribution
static const SolvAttr description
static const SolvAttr delnotify
static const SolvAttr installsize
static const SolvAttr downloadsize
static const SolvAttr insnotify
static const SolvAttr summary
static const SolvAttr checksum
static const SolvAttr updateStatus
static const SolvAttr installtime
static const SolvAttr eula
IdType id() const
Expert backdoor.
bool isPtfPackage() const
Subset of isPtf (provides ptfPackageToken).
bool isNeedreboot() const
Whether this solvable triggers the reboot-needed hint if installed/updated.
Capabilities supplements() const ZYPP_DEPRECATED
bool identIsAutoInstalled() const
Whether an installed solvable with the same ident is flagged as AutoInstalled.
OnMediaLocation lookupLocation() const
returns OnMediaLocation data: This is everything we need to download e.g.
Capabilities dep_suggests() const
Capabilities dep_conflicts() const
bool lookupBoolAttribute(const SolvAttr &attr) const
returns the boolean attribute value for attr or false if it does not exists.
std::ostream & operator<<(std::ostream &str, const Solvable &obj) ZYPP_API
Stream output.
IdString vendor() const
The vendor.
Capabilities recommends() const ZYPP_DEPRECATED
ByteCount installSize() const
Installed (unpacked) size.
Date buildtime() const
The items build time.
bool needToAcceptLicense() const
True except for well known exceptions (i.e show license but no need to accept it).
std::ostream & dumpOn(std::ostream &str, const Solvable &obj) ZYPP_API
More verbose stream output including dependencies.
ResKind kind() const
The Solvables ResKind.
CapabilitySet providesNamespace(const std::string &namespace_r) const
Return the namespaced provides 'namespace([value])[ op edition]' of this Solvable.
static const Solvable noSolvable
Represents no Solvable.
Capabilities dep_supplements() const
std::string asString() const
String representation "ident-edition.arch" or "noSolvable".
Capabilities suggests() const ZYPP_DEPRECATED
std::string distribution() const
The distribution string.
unsigned mediaNr() const
Media number the solvable is located on (0 if no media access required).
bool isBlacklisted() const
Whether this solvable is blacklisted (retracted,ptf,...).
unsigned long long lookupNumAttribute(const SolvAttr &attr) const
returns the numeric attribute value for attr or 0 if it does not exists.
Capabilities dep_enhances() const
std::string lookupStrAttribute(const SolvAttr &attr) const
returns the string attribute value for attr or an empty string if it does not exists.
Capabilities dep_recommends() const
Capabilities conflicts() const ZYPP_DEPRECATED
bool multiversionInstall() const
Whether different versions of this package can be installed at the same time.
std::ostream & dumpAsXmlOn(std::ostream &str, const Solvable &obj) ZYPP_API
XML output.
CpeId cpeId() const
The solvables CpeId if available.
Solvable nextInRepo() const
Return next Solvable in Repo (or noSolvable).
Date installtime() const
The items install time (false if not installed).
Edition edition() const
The edition (version-release).
static const IdString ptfMasterToken
Indicator provides ptf()
bool isPtfMaster() const
Subset of isPtf (provides ptfMasterToken).
Solvable()
Default ctor creates noSolvable.
Capabilities dep_obsoletes() const
LocaleSet getSupportedLocales() const
Return the supported locales.
bool supportsRequestedLocales() const
Whether this Solvable supports at least one requested locale.
detail::CSolvable * get() const
Expert backdoor.
Arch arch() const
The architecture.
static const IdString ptfPackageToken
Indicator provides ptf-package()
bool isSystem() const
Return whether this Solvable belongs to the system repo.
Solvable nextInPool() const
Return next Solvable in Pool (or noSolvable).
std::string licenseToConfirm(const Locale &lang_r=Locale()) const
License or agreement to accept before installing the solvable (opt.
bool supportsLocales() const
Whether this Solvable claims to support locales.
std::string asUserString() const
String representation "ident-edition.arch(repo)" or "noSolvable".
static const IdString retractedToken
Indicator provides retracted-patch-package()
Capabilities obsoletes() const ZYPP_DEPRECATED
std::string summary(const Locale &lang_r=Locale()) const
Short (singleline) text describing the solvable (opt.
Capabilities dep_prerequires() const
Capabilities dep_provides() const
detail::IdType lookupIdAttribute(const SolvAttr &attr) const
returns the id attribute value for attr or detail::noId if it does not exists.
std::pair< bool, CapabilitySet > matchesSolvable(const SolvAttr &attr, const sat::Solvable &solv) const
std::string name() const
The name (without any ResKind prefix).
bool supportsLocale(const Locale &locale_r) const
Whether this Solvable supports a specific Locale.
Capabilities dep_requires() const
ByteCount downloadSize() const
Download size.
bool isKind(const ResKind &kind_r) const
Test whether a Solvable is of a certain ResKind.
bool onSystemByAuto() const
Whether this is known to be automatically installed (as dependency of a user request package).
std::string delnotify(const Locale &lang_r=Locale()) const
UI hint text when selecting the solvable for uninstall (opt.
CapabilitySet valuesOfNamespace(const std::string &namespace_r) const
Return 'value[ op edition]' for namespaced provides 'namespace(value)[ op edition]'.
IdString ident() const
The identifier.
CheckSum lookupCheckSumAttribute(const SolvAttr &attr) const
returns the CheckSum attribute value for attr or an empty CheckSum if ir does not exist.
std::string description(const Locale &lang_r=Locale()) const
Long (multiline) text describing the solvable (opt.
bool onSystemByUser() const
Whether this is known to be installed on behalf of a user request.
Capabilities provides() const ZYPP_DEPRECATED
RepoInfo repoInfo() const
The repositories RepoInfo.
Capabilities enhances() const ZYPP_DEPRECATED
Capabilities prerequires() const ZYPP_DEPRECATED
Repository repository() const
The Repository this Solvable belongs to.
bool isPtf() const
Whether this solvable belongs to a PTF (provides ptfMasterToken or ptfPackageToken).
bool isRetracted() const
Whether this solvable is retracted (provides retractedToken).
bool isKind() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
std::string insnotify(const Locale &lang_r=Locale()) const
UI hint text when selecting the solvable for install (opt.
bool identical(const Solvable &rhs) const
Test whether two Solvables have the same content.
bool isPtfMaster(const Solvable &solv_r) const
bool isSystemRepo(CRepo *repo_r) const
bool isPtfPackage(const Solvable &solv_r) const
bool isNeedreboot(const Solvable &solv_r) const
Whether solv_r matches the spec.
bool isOnSystemByAuto(IdString ident_r) const
bool isRetracted(const Solvable &solv_r) const
CSolvable * getSolvable(SolvableIdType id_r) const
Return pointer to the sat-solvable or NULL if it is not valid.
bool isMultiversion(const Solvable &solv_r) const
bool isOnSystemByUser(IdString ident_r) const
static Ptr get(const pool::ByIdent &ident_r)
Get the Selctable.
String related utilities and Regular expression matching.
False false_c()
Convenience function for creating a False.
static const IdType solvablePrereqMarker(15)
Internal ids satlib includes in dependencies.
unsigned int SolvableIdType
Id type to connect Solvable and sat-solvable.
static const IdType noId(0)
int IdType
Generic Id type.
::s_Solvable CSolvable
Wrapped libsolv C data type exposed as backdoor.
static const SolvableIdType systemSolvableId(1)
Id to denote the usually hidden Solvable::systemSolvable.
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
Easy-to use interface to the ZYPP dependency resolver.
std::unordered_set< Locale > LocaleSet
std::unordered_set< Capability > CapabilitySet
Collector< TOutputIterator > collector(TOutputIterator iter_r)
Convenience constructor.
static PoolImpl & myPool()
RAII writing a nodes start/end tag.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.