1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/target/CommitPackageCache.cc
13 #include "zypp/base/Logger.h"
14 #include "zypp/base/Exception.h"
16 #include "zypp/target/CommitPackageCache.h"
17 #include "zypp/target/CommitPackageCacheImpl.h"
18 #include "zypp/target/CommitPackageCacheReadAhead.h"
22 #include "zypp/target/rpm/librpmDb.h"
23 #include "zypp/repo/PackageProvider.h"
24 #include "zypp/repo/DeltaCandidates.h"
25 #include "zypp/ResPool.h"
27 ///////////////////////////////////////////////////////////////////
29 { /////////////////////////////////////////////////////////////////
30 ///////////////////////////////////////////////////////////////////
32 { /////////////////////////////////////////////////////////////////
34 ///////////////////////////////////////////////////////////////////
36 ///////////////////////////////////////////////////////////////////
37 /// \class QueryInstalledEditionHelper
38 /// \short Helper for PackageProvider queries during download.
39 ///////////////////////////////////////////////////////////////////
40 struct QueryInstalledEditionHelper
42 bool operator()( const std::string & name_r, const Edition & ed_r, const Arch & arch_r ) const
44 rpm::librpmDb::db_const_iterator it;
45 for ( it.findByName( name_r ); *it; ++it )
47 if ( arch_r == it->tag_arch()
48 && ( ed_r == Edition::noedition || ed_r == it->tag_edition() ) )
57 ///////////////////////////////////////////////////////////////////
59 ///////////////////////////////////////////////////////////////////
61 // class RepoProvidePackage
63 ///////////////////////////////////////////////////////////////////
65 struct RepoProvidePackage::Impl
67 repo::RepoMediaAccess _access;
68 std::list<Repository> _repos;
69 repo::PackageProviderPolicy _packageProviderPolicy;
72 RepoProvidePackage::RepoProvidePackage()
75 const ResPool & pool( ResPool::instance() );
76 _impl->_repos.insert( _impl->_repos.begin(), pool.knownRepositoriesBegin(), pool.knownRepositoriesEnd() );
77 _impl->_packageProviderPolicy.queryInstalledCB( QueryInstalledEditionHelper() );
80 RepoProvidePackage::~RepoProvidePackage()
83 ManagedFile RepoProvidePackage::operator()( const PoolItem & pi_r, bool fromCache_r )
88 repo::PackageProvider pkgProvider( _impl->_access, pi_r, _impl->_packageProviderPolicy );
89 ret = pkgProvider.providePackageFromCache();
91 else if ( pi_r.satSolvable().isKind<Package>() ) // may make use of deltas
93 repo::DeltaCandidates deltas( _impl->_repos, pi_r.satSolvable().name() );
94 repo::PackageProvider pkgProvider( _impl->_access, pi_r, deltas, _impl->_packageProviderPolicy );
95 return pkgProvider.providePackage();
97 else // SrcPackage or throws
99 repo::PackageProvider pkgProvider( _impl->_access, pi_r, _impl->_packageProviderPolicy );
100 return pkgProvider.providePackage();
105 ///////////////////////////////////////////////////////////////////
107 // CLASS NAME : CommitPackageCache
109 ///////////////////////////////////////////////////////////////////
111 CommitPackageCache::CommitPackageCache( Impl * pimpl_r )
117 CommitPackageCache::CommitPackageCache( const Pathname & rootDir_r,
118 const PackageProvider & packageProvider_r )
120 if ( getenv("ZYPP_COMMIT_NO_PACKAGE_CACHE") )
122 MIL << "$ZYPP_COMMIT_NO_PACKAGE_CACHE is set." << endl;
123 _pimpl.reset( new Impl( packageProvider_r ) ); // no cache
127 _pimpl.reset( new CommitPackageCacheReadAhead( rootDir_r, packageProvider_r ) );
132 CommitPackageCache::~CommitPackageCache()
135 void CommitPackageCache::setCommitList( std::vector<sat::Solvable> commitList_r )
136 { _pimpl->setCommitList( commitList_r ); }
138 ManagedFile CommitPackageCache::get( const PoolItem & citem_r )
139 { return _pimpl->get( citem_r ); }
141 bool CommitPackageCache::preloaded() const
142 { return _pimpl->preloaded(); }
144 void CommitPackageCache::preloaded( bool newval_r )
145 { _pimpl->preloaded( newval_r ); }
147 /******************************************************************
149 ** FUNCTION NAME : operator<<
150 ** FUNCTION TYPE : std::ostream &
152 std::ostream & operator<<( std::ostream & str, const CommitPackageCache & obj )
153 { return str << *obj._pimpl; }
155 /////////////////////////////////////////////////////////////////
156 } // namespace target
157 ///////////////////////////////////////////////////////////////////
158 /////////////////////////////////////////////////////////////////
160 ///////////////////////////////////////////////////////////////////