return _val;
}
-
/////////////////////////////////////////////////////////////////
- static void logSat( struct _Pool *, void *data, int type, const char *logString )
+ static void logSat( CPool *, void *data, int type, const char *logString )
{
- if ( type & (SOLV_FATAL|SOLV_ERROR) ) {
- _ERR("libsolv") << logString;
- } else if ( type & SOLV_DEBUG_STATS ) {
- _DBG("libsolv") << logString;
- } else {
- _MIL("libsolv") << logString;
- }
+ // "1234567890123456789012345678901234567890
+ if ( 0 == strncmp( logString, " - no rule created", 19 ) )
+ return;
+ if ( 0 == strncmp( logString, " next rules: 0 0", 19 ) )
+ return;
+
+ if ( type & (SOLV_FATAL|SOLV_ERROR) ) {
+ L_ERR("libsolv") << logString;
+ } else if ( type & SOLV_DEBUG_STATS ) {
+ L_DBG("libsolv") << logString;
+ } else {
+ L_MIL("libsolv") << logString;
+ }
}
- detail::IdType PoolImpl::nsCallback( struct _Pool *, void * data, detail::IdType lhs, detail::IdType rhs )
+ detail::IdType PoolImpl::nsCallback( CPool *, void * data, detail::IdType lhs, detail::IdType rhs )
{
// lhs: the namespace identifier, e.g. NAMESPACE:MODALIAS
// rhs: the value, e.g. pci:v0000104Cd0000840[01]sv*sd*bc*sc*i*
::pool_freewhatprovides( _pool );
}
-
void PoolImpl::prepare() const
{
+ // additional /etc/sysconfig/storage check:
+ static WatchFile sysconfigFile( sysconfigStoragePath(), WatchFile::NO_INIT );
+ if ( sysconfigFile.hasChanged() )
+ {
+ _requiredFilesystemsPtr.reset(); // recreated on demand
+ const_cast<PoolImpl*>(this)->depSetDirty( "/etc/sysconfig/storage change" );
+ }
if ( _watcher.remember( _serial ) )
{
// After repo/solvable add/remove:
}
}
- void PoolImpl::prepareForSolving() const
- {
- // additional /etc/sysconfig/storage check:
- static WatchFile sysconfigFile( sysconfigStoragePath(), WatchFile::NO_INIT );
- if ( sysconfigFile.hasChanged() )
- {
- _requiredFilesystemsPtr.reset(); // recreated on demand
- const_cast<PoolImpl*>(this)->depSetDirty( "/etc/sysconfig/storage change" );
- }
- // finally prepare as usual:
- prepare();
- }
-
///////////////////////////////////////////////////////////////////
- ::_Repo * PoolImpl::_createRepo( const std::string & name_r )
+ CRepo * PoolImpl::_createRepo( const std::string & name_r )
{
setDirty(__FUNCTION__, name_r.c_str() );
- ::_Repo * ret = ::repo_create( _pool, name_r.c_str() );
+ CRepo * ret = ::repo_create( _pool, name_r.c_str() );
if ( ret && name_r == systemRepoAlias() )
::pool_set_installed( _pool, ret );
return ret;
}
- void PoolImpl::_deleteRepo( ::_Repo * repo_r )
+ void PoolImpl::_deleteRepo( CRepo * repo_r )
{
setDirty(__FUNCTION__, repo_r->name );
if ( isSystemRepo( repo_r ) )
_autoinstalled.clear();
eraseRepoInfo( repo_r );
- ::repo_free( repo_r, /*reuseids*/false );
+ ::repo_free( repo_r, /*resusePoolIDs*/false );
+ // If the last repo is removed clear the pool to actually reuse all IDs.
+ // NOTE: the explicit ::repo_free above asserts all solvables are memset(0)!
+ if ( !_pool->urepos )
+ ::pool_freeallrepos( _pool, /*resusePoolIDs*/true );
}
- int PoolImpl::_addSolv( ::_Repo * repo_r, FILE * file_r )
+ int PoolImpl::_addSolv( CRepo * repo_r, FILE * file_r )
{
setDirty(__FUNCTION__, repo_r->name );
int ret = ::repo_add_solv( repo_r, file_r, 0 );
return ret;
}
- int PoolImpl::_addHelix( ::_Repo * repo_r, FILE * file_r )
+ int PoolImpl::_addHelix( CRepo * repo_r, FILE * file_r )
{
setDirty(__FUNCTION__, repo_r->name );
int ret = ::repo_add_helix( repo_r, file_r, 0 );
return 0;
}
- void PoolImpl::_postRepoAdd( ::_Repo * repo_r )
+ void PoolImpl::_postRepoAdd( CRepo * repo_r )
{
if ( ! isSystemRepo( repo_r ) )
{
unsigned blockSize = 0;
for ( detail::IdType i = repo_r->start; i < repo_r->end; ++i )
{
- ::_Solvable * s( _pool->solvables + i );
+ CSolvable * s( _pool->solvables + i );
if ( s->repo == repo_r && sysids.find( s->arch ) == sysids.end() )
{
// Remember an unwanted arch entry:
else if ( blockSize )
{
// Free remembered entries
- ::repo_free_solvable_block( repo_r, blockBegin, blockSize, /*reuseids*/false );
+ ::repo_free_solvable_block( repo_r, blockBegin, blockSize, /*resusePoolIDs*/false );
blockBegin = blockSize = 0;
}
}
if ( blockSize )
{
// Free remembered entries
- ::repo_free_solvable_block( repo_r, blockBegin, blockSize, /*reuseids*/false );
+ ::repo_free_solvable_block( repo_r, blockBegin, blockSize, /*resusePoolIDs*/false );
blockBegin = blockSize = 0;
}
}
}
- detail::SolvableIdType PoolImpl::_addSolvables( ::_Repo * repo_r, unsigned count_r )
+ detail::SolvableIdType PoolImpl::_addSolvables( CRepo * repo_r, unsigned count_r )
{
setDirty(__FUNCTION__, repo_r->name );
return ::repo_add_solvable_block( repo_r, count_r );
void PoolImpl::setRepoInfo( RepoIdType id_r, const RepoInfo & info_r )
{
- ::_Repo * repo( getRepo( id_r ) );
+ CRepo * repo( getRepo( id_r ) );
if ( repo )
{
bool dirty = false;
return *_availableLocalesPtr;
}
+ ///////////////////////////////////////////////////////////////////
void PoolImpl::multiversionListInit() const
{
for ( Solvable solv : WhatProvides( Capability( provides ? spec.c_str() + prefix.size() : spec.c_str() ) ) )
{
- if ( solv.isSystem() )
- continue;
if ( provides || solv.ident() == spec )
multiversionList.insert( solv );
}
}
}
+ void PoolImpl::multiversionSpecChanged()
+ { _multiversionListPtr.reset(); }
+
const PoolImpl::MultiversionList & PoolImpl::multiversionList() const
{
if ( ! _multiversionListPtr )
bool PoolImpl::isMultiversion( const Solvable & solv_r ) const
{ return multiversionList().contains( solv_r ); }
+ ///////////////////////////////////////////////////////////////////
const std::set<std::string> & PoolImpl::requiredFilesystems() const
{