From 0cb68b7387923d46195a718bc72a553f9627b774 Mon Sep 17 00:00:00 2001 From: Duncan Mac-Vicar P Date: Wed, 21 Jun 2006 14:15:56 +0000 Subject: [PATCH] - Hook modalias() supplements without package to "kernel" (#184840) - Keep modalias() supplements without package in place (#184840) - Allow on-demand SourceManager::restore() (#186678) --- devel/devel.ma/Parse.cc | 100 +++++++++++++++++++++++++++--------------- package/libzypp.changes | 43 +++++++++++++++++- zypp/SourceManager.cc | 31 +++++++++++-- zypp/detail/ResolvableImpl.cc | 16 ++++--- 4 files changed, 144 insertions(+), 46 deletions(-) diff --git a/devel/devel.ma/Parse.cc b/devel/devel.ma/Parse.cc index 59a6373..3033c32 100644 --- a/devel/devel.ma/Parse.cc +++ b/devel/devel.ma/Parse.cc @@ -10,6 +10,7 @@ #include "zypp/ResPoolProxy.h" #include #include +#include "zypp/CapFactory.h" #include "zypp/NVRAD.h" #include "zypp/ResPool.h" @@ -120,7 +121,10 @@ using zypp::solver::detail::InstallOrder; struct AddResolvables { bool operator()( const Source_Ref & src ) const - { getZYpp()->addResolvables( src.resolvables() ); } + { + getZYpp()->addResolvables( src.resolvables() ); + return true; + } }; /////////////////////////////////////////////////////////////////// @@ -147,7 +151,7 @@ struct StatusReset : public SetTransactValue }; -inline bool selectForTransact( const NameKindProxy & nkp ) +inline bool selectForTransact( const NameKindProxy & nkp, Arch arch = Arch() ) { if ( nkp.availableEmpty() ) { ERR << "No Item to select: " << nkp << endl; @@ -155,6 +159,16 @@ inline bool selectForTransact( const NameKindProxy & nkp ) ZYPP_THROW( Exception("No Item to select") ); } + if ( arch != Arch() ) + { + typeof( nkp.availableBegin() ) it = nkp.availableBegin(); + for ( ; it != nkp.availableEnd(); ++it ) + { + if ( (*it)->arch() == arch ) + return (*it).status().setTransact( true, ResStatus::USER ); + } + } + return nkp.availableBegin()->status().setTransact( true, ResStatus::USER ); } @@ -171,7 +185,7 @@ int main( int argc, char * argv[] ) ResPool pool( getZYpp()->pool() ); - if ( 1 ) + if ( 0 ) { zypp::base::LogControl::TmpLineWriter shutUp; getZYpp()->initTarget( sysRoot ); @@ -180,16 +194,14 @@ int main( int argc, char * argv[] ) if ( 1 ) { //zypp::base::LogControl::TmpLineWriter shutUp; - SourceManager::sourceManager()->restore( sysRoot ); - if ( SourceManager::sourceManager()->allSources().empty() ) + //SourceManager::sourceManager()->restore( sysRoot ); + if ( 1 || SourceManager::sourceManager()->allSources().empty() ) { - Source_Ref src1( createSource( "dir:///mounts/machcd2/CDs/SLES-10-CD-x86_64-Build_1304/CD1" ) ); + Source_Ref src1( createSource( "dir:///Local/SPBUG/GA" ) ); SourceManager::sourceManager()->addSource( src1 ); -#if 0 - Source_Ref src2( createSource( "dir:///Local/SUSE-Linux-10.1-Build_830-Addon-BiArch/CD1" ) ); + Source_Ref src2( createSource( "dir:///Local/SPBUG/SP" ) ); SourceManager::sourceManager()->addSource( src2 ); -#endif - SourceManager::sourceManager()->store( sysRoot, true ); + //SourceManager::sourceManager()->store( sysRoot, true ); } for_each( SourceManager::sourceManager()->Source_begin(), SourceManager::sourceManager()->Source_end(), AddResolvables() ); @@ -201,36 +213,48 @@ int main( int argc, char * argv[] ) MIL << *SourceManager::sourceManager() << endl; MIL << pool << endl; + + NameKindProxy rug( nameKindProxy( pool, "rug" ) ); + INT << rug << endl; + if ( ! rug.availableEmpty() ) + { + PoolItem rugAv( *rug.availableBegin() ); + CapSet rugPrv( rugAv->dep( Dep::PROVIDES ) ); + dumpRange( USR << "rug prv: " << endl, + rugPrv.begin(), rugPrv.end() ) << endl; + + } + + INT << rug << endl; + return 0; + + if ( 1 ) { #if 0 -2006-06-02 14:54:37 <1> 10.10.2.245(3269) [solver] Resolver.cc(resolvePool):947 Resolver::resolvePool() -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 1: U_Tu_[S0:0][language]en_US-.noarch -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 4: U_Th_[S2:0][product]SUSE-Linux-Enterprise-Server-ia64-10-0.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 39: U_Th_[S2:0][pattern]apparmor-10-51.13.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 50: U_Th_[S2:0][pattern]x86-10-51.13.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 52: U_Th_[S2:0][pattern]base-10-51.13.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 187: U_Th_[S2:1][package]fpswa-1.18-81.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 226: U_Th_[S2:0][pattern]x11-10-51.13.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 969: U_Th_[S2:1][package]kernel-default-2.6.16.18-1.4.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 1995: U_Th_[S2:0][pattern]print_server-10-51.13.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 2069: U_Th_[S2:0][pattern]gnome-10-51.13.ia64 -2006-06-02 14:54:37 <0> 10.10.2.245(3269) [solver] Resolver.cc(show_pool):913 2130: U_Th_[S2:1][package]yast2-trans-en_US-2.13.5-7.1.noarch -2006-06-02 14:54:37 <1> 10.10.2.245(3269) [solver] Resolver.cc(resolveDependencies):606 Resolver::resolveDependencies() +Resolver.cc(show_pool):915 1: U_Th_[S2:0][product]SUSE-Linux-Enterprise-Server-i386-10-0.i686 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 2: U_Tu_[S0:0][language]de_DE-.noarch +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 15: U_Th_[S2:0][pattern]x11-10-51.18.i586 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 60: U_Th_[S2:0][pattern]gnome-10-51.18.i586 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 67: U_Th_[S2:0][pattern]apparmor-10-51.18.i586 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 70: U_Th_[S2:0][pattern]print_server-10-51.18.i586 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 78: U_Th_[S2:0][pattern]base-10-51.18.i586 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 799: U_Th_[S2:1][package]kernel-default-2.6.16.20-0.12.i586 +2006-06-20 06:47:47 <0> linux(8525) [solver] Resolver.cc(show_pool):915 1989: U_Th_[S2:1][package]yast2-trans-de-2.13.24-0.2.noarch #endif #define selt(K,N) selectForTransact( nameKindProxy( pool, #N ) ) - selt( Language, en_US ); - selt( Product, SUSE-Linux-Enterprise-Server-x86_64 ); - selt( Pattern, apparmor ); - //selt( Pattern, x86 ); - selt( Pattern, base ); - selt( Pattern, x11 ); - selt( Pattern, print_server ); - selt( Pattern, gnome ); - selt( Package, fpswa ); - selt( Package, kernel-default ); - selt( Package, yast2-trans-en_US ); + selt( Language, de_DE ); + selt( Language, de ); + selt( Product, SUSE-Linux-Enterprise-Server-i386 ); + selt( Pattern, x11 ); + selt( Pattern, gnome ); + selt( Pattern, apparmor ); + selt( Pattern, print_server ); + selt( Pattern, base ); + selt( Package, kernel-default ); + selt( Package, yast2-trans-de); + selectForTransact( nameKindProxy( pool, "glibc" ), Arch_i586 ); } else { @@ -244,11 +268,15 @@ int main( int argc, char * argv[] ) make_filter_begin(pool), make_filter_end(pool) ) << endl; + vdumpPoolStats( SEC, + pool.byKindBegin(), + pool.byKindEnd() ) << endl; + if ( 1 ) { bool eres, rres; { - zypp::base::LogControl::TmpLineWriter shutUp; - zypp::base::LogControl::instance().logfile( "SOLVER" ); + //zypp::base::LogControl::TmpLineWriter shutUp; + //zypp::base::LogControl::instance().logfile( "SOLVER" ); eres = getZYpp()->resolver()->establishPool(); rres = getZYpp()->resolver()->resolvePool(); } diff --git a/package/libzypp.changes b/package/libzypp.changes index e288316..722957b 100644 --- a/package/libzypp.changes +++ b/package/libzypp.changes @@ -1,4 +1,43 @@ ------------------------------------------------------------------- +Wed Jun 21 15:47:39 CEST 2006 - ma@suse.de + +- Strip self provides without edition in Resolvable ctor. + (#186079) +- revision 3673 + +------------------------------------------------------------------- +Wed Jun 21 15:26:49 CEST 2006 - dmacvicar@suse.de + +- Source::provideResolvables not implemented in yum source type. + Product not set for packages that are available from update source + (#186920) +- r3670 + +------------------------------------------------------------------- +Wed Jun 21 12:41:00 CEST 2006 - kkaempf@suse.de + +- Hook modalias() supplements without package to "kernel" (#184840) +- rev 3669 + +------------------------------------------------------------------- +Wed Jun 21 10:12:50 CEST 2006 - kkaempf@suse.de + +- Allow on-demand SourceManager::restore() (#186678) +- rev 3667 + +------------------------------------------------------------------- +Wed Jun 21 12:41:00 CEST 2006 - kkaempf@suse.de + +- Hook modalias() supplements without package to "kernel" (#184840) +- rev 3669 + +------------------------------------------------------------------- +Wed Jun 21 10:12:50 CEST 2006 - kkaempf@suse.de + +- Allow on-demand SourceManager::restore() (#186678) +- rev 3667 + +------------------------------------------------------------------- Mon Jun 19 15:17:17 CEST 2006 - mt@suse.de - Fix adding resolving of path names for mount points (#181606) @@ -42,7 +81,7 @@ Wed Jun 14 22:43:40 CEST 2006 - kkaempf@suse.de Wed Jun 14 17:26:39 CEST 2006 - dmacvicar@suse.de - fix for the last stall tmpfile (#178292) -- r3637 +- r3637 ------------------------------------------------------------------- Wed Jun 14 12:06:57 CEST 2006 - mt@suse.de @@ -72,7 +111,7 @@ Mon Jun 12 16:27:46 CEST 2006 - kkaempf@suse.de ------------------------------------------------------------------- Mon Jun 12 15:15:07 CEST 2006 - dmacvicar@suse.de -- fix #182003 YUM packages without size +- fix #182003 YUM packages without size - rev 3587 ------------------------------------------------------------------- diff --git a/zypp/SourceManager.cc b/zypp/SourceManager.cc index 859ec2e..f30ba10 100644 --- a/zypp/SourceManager.cc +++ b/zypp/SourceManager.cc @@ -339,9 +339,34 @@ namespace zypp << ", alias_filter '" << alias_filter << ", url_filter '" << url_filter << "')" << endl; - if (! _sources.empty() ) - ZYPP_THROW(SourcesAlreadyRestoredException()); -//Exception ( N_("At least one source already registered, cannot restore sources from persistent store.") ) ); + if (! _sources.empty() ) { + + // if we've already restored sources and this is an unfiltered call, reject it. + + if (alias_filter.empty() + && url_filter.empty()) + { + ZYPP_THROW(SourcesAlreadyRestoredException()); + //Exception ( N_("At least one source already registered, cannot restore sources from persistent store.") ) ); + } + + // check filters against already restore sources and check for duplicates. + // + for (SourceMap::const_iterator it = _sources.begin(); it != _sources.end(); ++it) { + if (!alias_filter.empty() + && (alias_filter == it->second.alias()) ) + { + MIL << "Source with alias '" << alias_filter << "' already restored."; + return true; + } + if (!url_filter.empty() + && (url_filter == it->second.url().asString()) ) + { + MIL << "Source with url '" << url_filter << "' already restored."; + return true; + } + } + } FailedSourcesRestoreException report; diff --git a/zypp/detail/ResolvableImpl.cc b/zypp/detail/ResolvableImpl.cc index c9a8e6b..71348ac 100644 --- a/zypp/detail/ResolvableImpl.cc +++ b/zypp/detail/ResolvableImpl.cc @@ -60,12 +60,18 @@ namespace zypp if ( isKind(cap_r) ) { // in case cap provides a packagename, inject a SUPPLEMENTS. - intrusive_ptr cap( capability::asKind(cap_r) ); - if ( cap && ! cap->pkgname().empty() ) - deps[Dep::SUPPLEMENTS].insert( CapFactory().parse( ResTraits::kind, cap->pkgname() ) ); + // if modalias does not provide a packagename, default to "kernel" (#184840) - deps[Dep::FRESHENS].insert(cap_r); - return true; // strip from provides + intrusive_ptr cap( capability::asKind(cap_r) ); + if ( cap ) { + std::string pkgname( cap->pkgname() ); + if ( pkgname.empty() ) { + pkgname = "kernel"; // every kernel provides "kernel", so this triggers always + } + deps[Dep::SUPPLEMENTS].insert( CapFactory().parse( ResTraits::kind, pkgname ) ); + deps[Dep::FRESHENS].insert(cap_r); + } + return true; // strip from original deps, we just splitted it to supplements/freshens } if ( isKind(cap_r) ) -- 2.7.4