libzypp 17.25.7
CommitPackageCache.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#include <iostream>
13#include <zypp/base/Logger.h>
14#include <zypp/base/Exception.h>
15
19
20using std::endl;
21
25#include <zypp/ResPool.h>
26
28namespace zypp
29{
31 namespace target
32 {
33
35 namespace {
40 struct QueryInstalledEditionHelper
41 {
42 bool operator()( const std::string & name_r, const Edition & ed_r, const Arch & arch_r ) const
43 {
44 rpm::librpmDb::db_const_iterator it;
45 for ( it.findByName( name_r ); *it; ++it )
46 {
47 if ( arch_r == it->tag_arch()
48 && ( ed_r == Edition::noedition || ed_r == it->tag_edition() ) )
49 {
50 return true;
51 }
52 }
53 return false;
54 }
55 };
56 } // namespace
58
60 //
61 // class RepoProvidePackage
62 //
64
66 {
68 std::list<Repository> _repos;
70 };
71
73 : _impl( new Impl )
74 {
75 const ResPool & pool( ResPool::instance() );
76 _impl->_repos.insert( _impl->_repos.begin(), pool.knownRepositoriesBegin(), pool.knownRepositoriesEnd() );
77 _impl->_packageProviderPolicy.queryInstalledCB( QueryInstalledEditionHelper() );
78 }
79
81 {}
82
83 ManagedFile RepoProvidePackage::operator()( const PoolItem & pi_r, bool fromCache_r )
84 {
85 ManagedFile ret;
86 if ( fromCache_r )
87 {
89 ret = pkgProvider.providePackageFromCache();
90 }
91 else if ( pi_r.isKind<Package>() ) // may make use of deltas
92 {
93 repo::DeltaCandidates deltas( _impl->_repos, pi_r.name() );
94 repo::PackageProvider pkgProvider( _impl->_access, pi_r, deltas, _impl->_packageProviderPolicy );
95 return pkgProvider.providePackage();
96 }
97 else // SrcPackage or throws
98 {
100 return pkgProvider.providePackage();
101 }
102 return ret;
103 }
104
106 //
107 // CLASS NAME : CommitPackageCache
108 //
110
112 : _pimpl( pimpl_r )
113 {
114 assert( _pimpl );
115 }
116
118 {
119 if ( getenv("ZYPP_COMMIT_NO_PACKAGE_CACHE") )
120 {
121 MIL << "$ZYPP_COMMIT_NO_PACKAGE_CACHE is set." << endl;
122 _pimpl.reset( new Impl( packageProvider_r ) ); // no cache
123 }
124 else
125 {
126 _pimpl.reset( new CommitPackageCacheReadAhead( packageProvider_r ) );
127 }
128 assert( _pimpl );
129 }
130
132 const PackageProvider & packageProvider_r )
133 : CommitPackageCache( packageProvider_r )
134 {}
135
137 {}
138
139 void CommitPackageCache::setCommitList( std::vector<sat::Solvable> commitList_r )
140 { _pimpl->setCommitList( commitList_r ); }
141
143 { return _pimpl->get( citem_r ); }
144
146 { return _pimpl->preloaded(); }
147
148 void CommitPackageCache::preloaded( bool newval_r )
149 { _pimpl->preloaded( newval_r ); }
150
151 /******************************************************************
152 **
153 ** FUNCTION NAME : operator<<
154 ** FUNCTION TYPE : std::ostream &
155 */
156 std::ostream & operator<<( std::ostream & str, const CommitPackageCache & obj )
157 { return str << *obj._pimpl; }
158
160 } // namespace target
163} // namespace zypp
#define MIL
Definition: Logger.h:79
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
Definition: AutoDispose.h:93
static const Edition noedition
Value representing noedition ("") This is in fact a valid Edition.
Definition: Edition.h:73
Package interface.
Definition: Package.h:33
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:51
Global ResObject pool.
Definition: ResPool.h:61
static ResPool instance()
Singleton ctor.
Definition: ResPool.cc:37
repository_iterator knownRepositoriesBegin() const
Definition: ResPool.cc:82
repository_iterator knownRepositoriesEnd() const
Definition: ResPool.cc:85
Candidate delta and patches for a package.
Policies and options for PackageProvider.
PackageProviderPolicy & queryInstalledCB(QueryInstalledCB queryInstalledCB_r)
Set callback.
Provide a package from a Repo.
ManagedFile providePackage() const
Provide the package.
ManagedFile providePackageFromCache() const
Provide the package if it is cached.
Provides files from different repos.
Base for CommitPackageCache implementations (implements no chache).
virtual ManagedFile get(const PoolItem &citem_r)
Provide the package.
void setCommitList(std::vector< sat::Solvable > commitList_r)
Target::commit helper optimizing package provision.
void setCommitList(std::vector< sat::Solvable > commitList_r)
Download(commit) sequence of solvables to compute read ahead.
bool preloaded() const
Whether preloaded hint is set.
CommitPackageCache(const PackageProvider &packageProvider_r=RepoProvidePackage())
Ctor.
RW_pointer< Impl > _pimpl
Pointer to implementation.
ManagedFile get(const PoolItem &citem_r)
Provide a package.
function< ManagedFile(const PoolItem &pi, bool fromCache_r)> PackageProvider
ManagedFile operator()(const PoolItem &pi, bool fromCache_r)
Provide package optionally fron cache only.
String related utilities and Regular expression matching.
std::ostream & operator<<(std::ostream &str, const CommitPackageCache &obj)
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::string name() const
Definition: SolvableType.h:70
bool isKind(const ResKind &kind_r) const
Definition: SolvableType.h:64
repo::PackageProviderPolicy _packageProviderPolicy