14 #include <boost/mpl/int.hpp> 47 #undef ZYPP_BASE_LOGGER_LOGGROUP 48 #define ZYPP_BASE_LOGGER_LOGGROUP "zypp::satpool" 59 const char * envp = getenv(
"LIBSOLV_DEBUGMASK");
60 return envp ? str::strtonum<int>( envp ) : 0;
96 static const std::string _val(
"@System" );
102 static const Pathname _val(
"/etc/sysconfig/storage" );
108 static void logSat(
CPool *,
void *data,
int type,
const char *logString )
111 if ( 0 == strncmp( logString,
" - no rule created", 19 ) )
113 if ( 0 == strncmp( logString,
" next rules: 0 0", 19 ) )
116 if ( type & (SOLV_FATAL|SOLV_ERROR) ) {
117 L_ERR(
"libsolv") << logString;
118 }
else if ( type & SOLV_DEBUG_STATS ) {
119 L_DBG(
"libsolv") << logString;
121 L_MIL(
"libsolv") << logString;
137 case NAMESPACE_LANGUAGE:
140 return localeIds.
contains(
IdString(rhs) ) ? RET_systemProperty : RET_unsupported;
144 case NAMESPACE_MODALIAS:
154 case NAMESPACE_FILESYSTEM:
164 return RET_unsupported;
184 : _pool( ::pool_create() )
186 MIL <<
"Creating sat-pool." << endl;
192 ::pool_setdisttype(
_pool, DISTTYPE_RPM );
201 if ( getenv(
"ZYPP_LIBSOLV_FULLLOG") || getenv(
"ZYPP_LIBSAT_FULLLOG") )
202 ::pool_setdebuglevel(
_pool, 3 );
203 else if ( getenv(
"ZYPP_FULLLOG") )
204 ::pool_setdebuglevel(
_pool, 2 );
206 ::pool_setdebugmask(
_pool, SOLV_DEBUG_JOB|SOLV_DEBUG_STATS );
213 _pool->nscallbackdata = (
void*)
this;
223 ::pool_free(
_pool );
232 if ( a3 )
MIL << a1 <<
" " << a2 <<
" " << a3 << endl;
233 else if ( a2 )
MIL << a1 <<
" " << a2 << endl;
234 else MIL << a1 << endl;
247 if ( a3 )
MIL << a1 <<
" " << a2 <<
" " << a3 << endl;
248 else if ( a2 )
MIL << a1 <<
" " << a2 << endl;
249 else MIL << a1 << endl;
259 if ( a3 )
MIL << a1 <<
" " << a2 <<
" " << a3 << endl;
260 else if ( a2 )
MIL << a1 <<
" " << a2 << endl;
261 else MIL << a1 << endl;
263 ::pool_freewhatprovides(
_pool );
281 if ( !
_pool->whatprovides )
283 MIL <<
"pool_createwhatprovides..." << endl;
285 ::pool_addfileprovides(
_pool );
286 ::pool_createwhatprovides(
_pool );
288 if ( !
_pool->languages )
299 setDirty(__FUNCTION__, name_r.c_str() );
300 CRepo * ret = ::repo_create(
_pool, name_r.c_str() );
302 ::pool_set_installed(
_pool, ret );
308 setDirty(__FUNCTION__, repo_r->name );
312 ::repo_free( repo_r,
false );
315 if ( !
_pool->urepos )
318 ::pool_freeallrepos(
_pool,
true );
324 setDirty(__FUNCTION__, repo_r->name );
325 int ret = ::repo_add_solv( repo_r, file_r, 0 );
333 setDirty(__FUNCTION__, repo_r->name );
345 std::set<detail::IdType> sysids;
348 for_( it, sysarchs.begin(), sysarchs.end() )
349 sysids.insert( it->id() );
352 sysids.insert( ARCH_SRC );
353 sysids.insert( ARCH_NOSRC );
357 unsigned blockSize = 0;
361 if ( s->repo == repo_r && sysids.find( s->arch ) == sysids.end() )
368 else if ( blockSize )
371 ::repo_free_solvable_block( repo_r, blockBegin, blockSize,
false );
372 blockBegin = blockSize = 0;
378 ::repo_free_solvable_block( repo_r, blockBegin, blockSize,
false );
379 blockBegin = blockSize = 0;
386 setDirty(__FUNCTION__, repo_r->name );
387 return ::repo_add_solvable_block( repo_r, count_r );
399 if ( repo->priority !=
int(-info_r.
priority()) )
401 repo->priority = -info_r.
priority();
408 if ( repo->subpriority != mediaPriority )
410 repo->subpriority = mediaPriority;
424 std::vector<std::string> fallbacklist;
427 fallbacklist.push_back( l.code() );
429 dumpRangeLine(
MIL <<
"pool_set_languages: ", fallbacklist.begin(), fallbacklist.end() ) << endl;
431 std::vector<const char *> fallbacklist_cstr;
432 for_( it, fallbacklist.begin(), fallbacklist.end() )
434 fallbacklist_cstr.push_back( it->c_str() );
436 ::pool_set_languages(
_pool, &fallbacklist_cstr.front(), fallbacklist_cstr.size() );
492 if ( localesTracker.
wasAdded( lang ) )
494 for ( ; lang; lang = lang.fallback() )
501 for ( ; lang && localeIds.
current().insert(
IdString(lang) ).second; lang = lang.fallback() )
508 for ( ; lang && ! localeIds.
current().count(
IdString(lang) ); lang = lang.fallback() )
514 if ( localeIds.
current().empty() )
527 switch ( detail.
capRel() )
537 if ( detail.
lhs().
id() == NAMESPACE_LANGUAGE )
560 for (
const Capability & cap : pi.supplements() )
579 static const std::string prefix(
"provides:" );
584 if ( provides || solv.ident() == spec )
589 MIL <<
"Multiversion install " << spec <<
": " << (nsize-size) <<
" matches" << endl;
static const SolvableIdType noSolvableId(0)
Id to denote Solvable::noSolvable.
static const IdType namespaceModalias(18)
bool contains(const TSolv &solv_r) const
bool contains(const key_type &key_r) const
Whether val_r is in the set.
unsigned priority() const
Repository priority for solver.
const Pathname & sysconfigStoragePath()
int IdType
Generic Id type.
A Solvable object within the sat Pool.
Container of Solvable providing a Capability (read only).
bool eraseRequestedLocale(const Locale &locale_r)
User change (tracked).
scoped_ptr< LocaleSet > _availableLocalesPtr
std::string code() const
Return the locale code asString.
Track added/removed set items based on an initial set.
std::string asString(const DefaultIntegral< Tp, TInitial > &obj)
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
static ZConfig & instance()
Singleton ctor.
void multiversionListInit() const
static const Locale enCode
Last resort "en".
bool remember(unsigned serial_r) const
Return isDirty, storing serial_r as new value.
Locale textLocale() const
The locale for translated texts zypp uses.
Helper providing more detailed information about a Capability.
int _addSolv(CRepo *repo_r, FILE *file_r)
Adding solv file to a repo.
base::SetTracker< LocaleSet > _requestedLocalesTracker
::_Repo CRepo
Wrapped libsolv C data type exposed as backdoor.
bool addRequestedLocale(const Locale &locale_r)
User change (tracked).
void setDirty(const char *a1=0, const char *a2=0, const char *a3=0)
Invalidate housekeeping data (e.g.
bool set(set_type new_r)
Set a new_r set and track changes.
const std::set< std::string > & requiredFilesystems() const
accessor for etc/sysconfig/storage reading file on demand
::_Repo * RepoIdType
Id type to connect Repo and sat-repo.
bool setInitial()
(Re-)Start tracking the current set (discards previously tracked changes).
const MultiversionList & multiversionList() const
void _deleteRepo(CRepo *repo_r)
Delete repo repo_r from pool.
std::set< Arch, CompareByGT< Arch > > CompatSet
Reversed arch order, best Arch first.
Locale fallback() const
Return the fallback locale for this locale, if no fallback exists the empty Locale::noCode.
::_Pool CPool
Wrapped libsolv C data type exposed as backdoor.
bool wasAdded(const key_type &key_r) const
Whether val_r is tracked as added.
unsigned SolvableIdType
Id type to connect Solvable and sat-solvable.
void eraseRepoInfo(RepoIdType id_r)
What is known about a repository.
Access to the sat-pools string space.
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \)
Split line_r into words.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
detail::SolvableIdType _addSolvables(CRepo *repo_r, unsigned count_r)
Adding Solvables to a repo.
void localeSetDirty(const char *a1=0, const char *a2=0, const char *a3=0)
Invalidate locale related housekeeping data.
::_Solvable CSolvable
Wrapped libsolv C data type exposed as backdoor.
static const IdType solvableFileMarker(16)
map< string, string > read(const Pathname &_path)
Read sysconfig file path_r and return (key,valye) pairs.
CRepo * getRepo(RepoIdType id_r) const
Remember a files attributes to detect content changes.
const set_type & removed() const
Return the set of removed items.
sat::detail::IdType id() const
Expert backdoor.
bool isSystemRepo(CRepo *repo_r) const
int repo_add_helix(::Repo *repo, FILE *fp, int flags)
Url url() const
Pars pro toto: The first repository url.
static detail::IdType nsCallback(CPool *, void *data, detail::IdType lhs, detail::IdType rhs)
Callback to resolve namespace dependencies (language, modalias, filesystem, etc.).
static Pool instance()
Singleton ctor.
static const IdType emptyId(1)
void setRepoInfo(RepoIdType id_r, const RepoInfo &info_r)
Also adjust repo priority and subpriority accordingly.
const TrackedLocaleIds & trackedLocaleIds() const
Expanded _requestedLocalesTracker for solver.
SerialNumberWatcher _watcher
Watch serial number.
std::string alias() const
unique identifier for this source.
static const SolvableIdType systemSolvableId(1)
Id to denote the usually hidden Solvable::systemSolvable.
void setRequestedLocales(const LocaleSet &locales_r)
User change (tracked).
const set_type & current() const
Return the current set.
bool add(const value_type &val_r)
Add an element to the set and track changes.
sat::StringQueue _autoinstalled
const set_type & added() const
Return the set of added items.
SerialNumber _serialIDs
Serial number of IDs - changes whenever resusePoolIDs==true - ResPool must also invalidate it's PoolI...
static PoolImpl & myPool()
static const IdType namespaceFilesystem(21)
bool query(IdString cap_r) const
Checks if a device on the system matches a modalias pattern.
BOOST_MPL_ASSERT_RELATION(noId,==, STRID_NULL)
static CompatSet compatSet(const Arch &targetArch_r)
Return a set of all Arch's compatibleWith a targetArch_r.
void prepare() const
Update housekeeping data (e.g.
bool isMultiversion(const Solvable &solv_r) const
'Language[_Country]' codes.
void _postRepoAdd(CRepo *repo_r)
Helper postprocessing the repo after adding solv or helix files.
SerialNumber _serial
Serial number - changes with each Pool content change.
scoped_ptr< MultiversionList > _multiversionListPtr
static Modalias & instance()
Singleton access.
void depSetDirty(const char *a1=0, const char *a2=0, const char *a3=0)
Invalidate housekeeping data (e.g.
static void logSat(CPool *, void *data, int type, const char *logString)
Base class for Exception.
scoped_ptr< std::set< std::string > > _requiredFilesystemsPtr
filesystems mentioned in /etc/sysconfig/storage
void setTextLocale(const Locale &locale_r)
void clear()
Clear the queue.
static const IdType namespaceLanguage(20)
std::map< RepoIdType, RepoInfo > _repoinfos
Additional RepoInfo.
void initRequestedLocales(const LocaleSet &locales_r)
Start tracking changes based on this locales_r.
static const std::string & systemRepoAlias()
Reserved system repository alias .
static void _getLocaleDeps(const Capability &cap_r, LocaleSet &store_r)
static const IdType noId(0)
std::ostream & dumpRangeLine(std::ostream &str, TIterator begin, TIterator end)
Print range defined by iterators (single line style).
static const IdType solvablePrereqMarker(15)
Internal ids satlib includes in dependencies.
const LocaleSet & getAvailableLocales() const
All Locales occurring in any repo.
bool remove(const value_type &val_r)
Remove an element from the set and track changes.
scoped_ptr< TrackedLocaleIds > _trackedLocaleIdsPtr
Container::size_type size_type
Easy-to use interface to the ZYPP dependency resolver.
size_type size() const
Size of the set.
int _addHelix(CRepo *repo_r, FILE *file_r)
Adding helix file to a repo.
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
CRepo * _createRepo(const std::string &name_r)
Creating a new repo named name_r.
std::unordered_set< Locale > LocaleSet
std::string hexdecode(const C_Str &str_r)
Decode hexencoded XX sequences.
void multiversionSpecChanged()
bool insert(const TSolv &solv_r)
Insert a Solvable.
Solvable set wrapper to allow adding additional convenience iterators.