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.isKind<Package>() ) // may make use of deltas
93 repo::DeltaCandidates deltas( _impl->_repos, pi_r.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 PackageProvider & packageProvider_r )
119 if ( getenv("ZYPP_COMMIT_NO_PACKAGE_CACHE") )
121 MIL << "$ZYPP_COMMIT_NO_PACKAGE_CACHE is set." << endl;
122 _pimpl.reset( new Impl( packageProvider_r ) ); // no cache
126 _pimpl.reset( new CommitPackageCacheReadAhead( packageProvider_r ) );
131 CommitPackageCache::CommitPackageCache( const Pathname & /*rootDir_r*/,
132 const PackageProvider & packageProvider_r )
133 : CommitPackageCache( packageProvider_r )
136 CommitPackageCache::~CommitPackageCache()
139 void CommitPackageCache::setCommitList( std::vector<sat::Solvable> commitList_r )
140 { _pimpl->setCommitList( commitList_r ); }
142 ManagedFile CommitPackageCache::get( const PoolItem & citem_r )
143 { return _pimpl->get( citem_r ); }
145 bool CommitPackageCache::preloaded() const
146 { return _pimpl->preloaded(); }
148 void CommitPackageCache::preloaded( bool newval_r )
149 { _pimpl->preloaded( newval_r ); }
151 /******************************************************************
153 ** FUNCTION NAME : operator<<
154 ** FUNCTION TYPE : std::ostream &
156 std::ostream & operator<<( std::ostream & str, const CommitPackageCache & obj )
157 { return str << *obj._pimpl; }
159 /////////////////////////////////////////////////////////////////
160 } // namespace target
161 ///////////////////////////////////////////////////////////////////
162 /////////////////////////////////////////////////////////////////
164 ///////////////////////////////////////////////////////////////////