4 #include <wibble/test.h> 10 #include <wibble/exception.h> 12 #include <apt-pkg/pkgcache.h> 13 #include <apt-pkg/sourcelist.h> 14 #include <apt-pkg/error.h> 15 #include <apt-pkg/policy.h> 16 #include <apt-pkg/cachefile.h> 17 #include <apt-pkg/progress.h> 18 #include <apt-pkg/pkgcachegen.h> 19 #include <apt-pkg/init.h> 28 std::string
desc()
const throw () {
33 while ( !_error->empty() ) {
35 _error->PopMessage( err );
36 std::cerr << err << std::endl;
60 operator unsigned() {
return m_state; };
79 bool isValid()
const {
return m_state & Valid; }
83 bool install()
const {
return m_state & Install; }
85 bool reinstall()
const {
return m_state & ReInstall; }
86 bool remove()
const {
return m_state & Remove; }
88 bool purge()
const {
return m_state & Purge; }
89 bool keep()
const {
return m_state & Keep; }
90 bool willBreak()
const {
return m_state & WillBreak; }
92 bool upgrade()
const {
return hasNewVersion() && install(); }
94 bool newInstall()
const {
return !installed() && install(); }
95 bool hold()
const {
return m_state & Hold; }
97 bool installed()
const {
return m_state & Installed; }
99 bool upgradable()
const {
return hasNewVersion() && !hold(); }
100 bool held()
const {
return hasNewVersion() && hold(); }
103 bool modify()
const {
return install() ||
remove(); }
143 m_progress =
new OpProgress();
144 m_tryWriteable =
true;
159 m_state =
new pkgDepCache( &cache(), m_policy );
160 m_state->Init( m_progress );
165 if ( !_config->FindB(
"Initialized") ) {
166 pkgInitConfig(*_config);
167 _config->Set(
"Initialized", 1);
168 pkgInitSystem(*_config, _system);
171 m_writeable = m_tryWriteable;
173 if ( m_tryWriteable ) {
176 }
catch ( std::exception e ) {
177 m_tryWriteable =
false;
179 m_tryWriteable =
true;
185 if ( list.ReadMainList() == false ) {
186 _error->DumpErrors();
187 throw wibble::exception::System(
188 "The list of sources could not be read." );
192 bool Res = pkgMakeStatusCache( list, *m_progress, &m, !m_writeable );
195 std::cerr <<
"The package lists or status file " 196 "could not be parsed or opened." << std::endl;
198 "The package lists or status file " 199 "could not be parsed or opened." );
202 m_cache =
new pkgCache( m,
true );
203 m_policy =
new pkgPolicy( m_cache );
204 if ( ReadPinFile( *m_policy ) ==
false )
205 throw wibble::exception::System(
"error reading pin file" );
210 if ( _config->FindB(
"Initialized") ) {
222 pkgCache::VerIterator
anyVersion( pkgCache::PkgIterator pi ) {
223 if ( pi.end() )
return pkgCache::VerIterator();
224 return pi.VersionList();
228 pkgCache::PkgIterator pi = cache().FindPkg( p.
package() );
229 if ( pi.end() )
return Token();
230 pkgCache::VerIterator vi = policy().GetCandidateVer( pi );
231 if ( vi.end() )
return Token();
238 if ( pi.end() )
return pkgCache::VerIterator();
239 pkgCache::VerIterator vi = policy().GetCandidateVer( pi );
240 if ( vi.end() )
return pkgCache::VerIterator();
245 if ( pi.end() )
return pkgCache::VerIterator();
246 pkgCache::VerIterator vi = pkgCache::VerIterator( cache(),
247 cache().VerP + pi->CurrentVer );
248 if ( vi.end() )
return pkgCache::VerIterator();
253 return cache().FindPkg( t.
package() );
258 t = candidateVersion( t );
259 pkgCache::PkgIterator pi = lookupPackage( t );
261 return pkgCache::VerIterator();
262 for (pkgCache::VerIterator vi = pi.VersionList(); !vi.end(); ++vi)
263 if ( t.
version() == vi.VerStr() )
265 return pkgCache::VerIterator();
269 pkgCache::VerIterator vi )
272 return pkgCache::VerFileIterator();
273 pkgCache::VerFileIterator vfi = vi.FileList();
274 for ( ; !vfi.end(); vfi++ )
275 if ( ( vfi.File()->Flags & pkgCache::Flag::NotSource ) == 0)
290 return invalidState();
291 if ( ! ( P->CurrentState == pkgCache::State::ConfigFiles
292 || P->CurrentState == pkgCache::State::NotInstalled ) )
295 candidateVersion( P ) != installedVersion( P ) )
297 pkgDepCache::StateCache S = state()[ P ];
300 if ( ( S.iFlags & pkgDepCache::ReInstall )
301 == pkgDepCache::ReInstall )
307 if ( ( S.iFlags & pkgDepCache::Purge ) == pkgDepCache::Purge )
311 if ( S.InstBroken() )
313 if ( P->SelectedState == pkgCache::State::Hold )
321 return packageState( lookupPackage( t ) );
322 return invalidState();
327 return lookupVersion( t ).end() ?
Token() : t;
328 return lookupPackage( t ).end() ?
Token() : t;
341 template<
typename Internal >
352 bool empty()
const {
return m_head.end(); }
391 extern const char *
fields[];
396 typedef std::string
T;
std::string desc() const
Definition: core/apt.h:28
pkgCache::PkgIterator lookupPackage(Token t)
Definition: core/apt.h:252
bool hasVersion() const
Definition: token.h:36
Definition: core/apt.h:42
pkgDepCache & state()
Definition: core/apt.h:119
Definition: core/apt.h:50
Definition: core/apt.h:388
PackageState & operator=(unsigned i)
Definition: core/apt.h:62
const version::Internal & head() const
Definition: core/apt.h:377
Definition: core/apt.h:27
unsigned m_state
Definition: core/apt.h:106
void invalidate()
Definition: core/apt.h:209
const char * fields[]
Definition: record.cpp:8
Definition: core/apt.h:47
Token validate(Token t)
Definition: core/apt.h:325
Definition: core/apt.h:51
Definition: core/apt.h:54
bool m_writeable
Definition: core/apt.h:133
time_t timestamp()
Definition: core/apt.h:135
pkgPolicy * m_policy
Definition: core/apt.h:338
PackageState & operator|=(const PackageState &s)
Definition: core/apt.h:67
Internal & head()
Definition: core/apt.h:351
Definition: core/apt.h:389
Definition: core/apt.h:388
AptException(const std::string &ctx)
Definition: core/apt.h:32
bool hold() const
Definition: core/apt.h:95
pkgCache::VerIterator Internal
Definition: core/apt.h:362
Definition: core/apt.h:387
Definition: core/apt.h:369
Definition: core/apt.h:44
bool writeable()
Definition: core/apt.h:152
Internal m_head
Definition: core/apt.h:343
Internal Type
Definition: core/apt.h:344
-*- C++ -*- (c) 2006, 2007 Petr Rockai me@mornfall.net
Definition: apt.cc:43
bool isInstalled() const
Definition: core/apt.h:81
OpProgress * m_progress
Definition: core/apt.h:131
PackageState invalidState()
Definition: core/apt.h:282
pkgCache * m_cache
Definition: core/apt.h:336
Definition: core/apt.h:374
bool purge() const
Definition: core/apt.h:88
Definition: core/apt.h:387
pkgCache::VerIterator lookupVersion(Token t)
Definition: core/apt.h:256
bool install() const
Definition: core/apt.h:83
pkgCache::VerFileIterator Internal
Definition: core/apt.h:393
Definition: core/apt.h:395
bool held() const
Definition: core/apt.h:100
Definition: core/apt.h:46
std::string package() const
Definition: token.h:22
pkgPolicy & policy()
Definition: core/apt.h:125
Definition: core/apt.h:389
Definition: core/apt.h:112
Definition: core/apt.h:360
Definition: core/apt.h:388
bool valid() const
Definition: token.h:40
pkgCache::VerIterator anyVersion(pkgCache::PkgIterator pi)
Definition: core/apt.h:222
time_t aptTimestamp()
Definition: apt.cpp:9
~AptDatabase()
Definition: core/apt.h:331
bool willBreak() const
Definition: core/apt.h:90
bool nowBroken() const
Definition: core/apt.h:101
static pkgCache::VerFileIterator lookupVersionFile(pkgCache::VerIterator vi)
Definition: core/apt.h:268
Definition: core/apt.h:52
version::Internal m_head
Definition: core/apt.h:375
Definition: core/apt.h:389
Definition: core/apt.h:359
PackageState()
Definition: core/apt.h:76
bool hasNewVersion() const
Definition: core/apt.h:98
void openState()
Definition: core/apt.h:158
std::string version() const
Definition: token.h:17
Query
Definition: core/apt.h:43
const Internal & head() const
Definition: core/apt.h:350
Definition: core/apt.h:369
PackageState(unsigned a)
Definition: core/apt.h:72
Definition: core/apt.h:53
bool modify() const
Definition: core/apt.h:103
Definition: core/apt.h:360
void setProgress(OpProgress *p)
Definition: core/apt.h:148
Definition: core/apt.h:342
bool keep() const
Definition: core/apt.h:89
Definition: core/apt.h:388
pkgDepCache * m_state
Definition: core/apt.h:337
bool isValid() const
Definition: core/apt.h:79
version::Internal & head()
Definition: core/apt.h:378
std::string _id
Definition: token.h:11
bool installed() const
Definition: core/apt.h:97
bool empty() const
Definition: core/apt.h:352
Definition: core/apt.h:387
PropertyId
Definition: core/apt.h:387
AptInternalList tail() const
Definition: core/apt.h:345
Definition: core/apt.h:370
pkgCache::VerIterator candidateVersion(pkgCache::PkgIterator pi)
Definition: core/apt.h:237
Token candidateVersion(Token p)
Definition: core/apt.h:227
Definition: core/apt.h:363
std::string T
Definition: core/apt.h:396
AptInternalList< Internal > InternalList
Definition: core/apt.h:381
AptInternalList(Internal head)
Definition: core/apt.h:353
pkgCache::VerIterator installedVersion(pkgCache::PkgIterator pi)
Definition: core/apt.h:244
PackageState packageState(pkgCache::PkgIterator P)
Definition: core/apt.h:286
AptDatabase()
Definition: core/apt.h:139
pkgCache & cache()
Definition: core/apt.h:113
Definition: core/apt.h:387
Definition: core/apt.h:372
Definition: core/apt.h:369
bool m_tryWriteable
Definition: core/apt.h:132
bool reinstall() const
Definition: core/apt.h:85
AptInternalList()
Definition: core/apt.h:354
bool newInstall() const
Definition: core/apt.h:94
bool upgrade() const
Definition: core/apt.h:92
bool upgradable() const
Definition: core/apt.h:99
PackageState packageState(Token t)
Definition: core/apt.h:318
Definition: core/apt.h:369
Definition: core/apt.h:387
Definition: core/apt.h:387
void openCache()
Definition: core/apt.h:164
unsigned state
Definition: core/apt.h:58
Definition: core/apt.h:49
Definition: core/apt.h:359
Definition: core/apt.h:48