1
1
// -*- mode: cpp; mode: fold -*-
2
2
// Description /*{{{*/
3
// $Id: packagemanager.cc,v 1.6 1998/11/22 03:20:33 jgg Exp $
3
// $Id: packagemanager.cc,v 1.7 1998/11/22 23:37:05 jgg Exp $
4
4
/* ######################################################################
6
6
Package Manager - Abstacts the package manager
51
51
bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
54
pkgCache::PkgIterator I = Cache.PkgBegin();
55
for (;I.end() != true; I++)
58
if ((Cache[I].InstallVer == (pkgCache::Version *)I.CurrentVer() &&
59
I.State() != pkgCache::PkgIterator::NeedsUnpack) ||
60
Cache[I].Delete() == true)
54
if (CreateOrderList() == false)
57
if (List->OrderUnpack() == false)
58
return _error->Error("Internal ordering error");
60
for (pkgOrderList::iterator I = List->begin(); I != List->end(); I++)
62
PkgIterator Pkg(Cache,*I);
64
// Skip packages to erase
65
if (Cache[Pkg].Delete() == true)
63
new pkgAcqArchive(Owner,Sources,Recs,Cache[I].InstVerIter(Cache),
68
new pkgAcqArchive(Owner,Sources,Recs,Cache[Pkg].InstVerIter(Cache),
97
// PM::CreateOrderList - Create the ordering class /*{{{*/
98
// ---------------------------------------------------------------------
99
/* This populates the ordering list with all the packages that are
101
bool pkgPackageManager::CreateOrderList()
104
List = new pkgOrderList(Cache);
106
// Generate the list of affected packages and sort it
107
for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
109
// Consider all depends
110
if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
112
List->Flag(I,pkgOrderList::Immediate);
113
if (Cache[I].InstallVer != 0)
114
for (DepIterator D = Cache[I].InstVerIter(Cache).DependsList();
115
D.end() == false; D++)
116
if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
117
List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
118
if (I->CurrentVer != 0)
119
for (DepIterator D = I.CurrentVer().DependsList();
120
D.end() == false; D++)
121
if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
122
List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
126
if ((Cache[I].Keep() == true ||
127
Cache[I].InstVerIter(Cache) == I.CurrentVer()) &&
128
I.State() == pkgCache::PkgIterator::NeedsNothing)
131
// Append it to the list
134
if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
135
List->Flag(I,pkgOrderList::Immediate);
91
141
// PM::DepAlwaysTrue - Returns true if this dep is irrelevent /*{{{*/
92
142
// ---------------------------------------------------------------------
93
143
/* The restriction on provides is to eliminate the case when provides
413
463
bool pkgPackageManager::OrderInstall()
416
List = new pkgOrderList(Cache);
465
if (CreateOrderList() == false)
418
// Generate the list of affected packages and sort it
419
for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
421
// Consider all depends
422
if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
424
List->Flag(I,pkgOrderList::Immediate);
425
if (Cache[I].InstallVer != 0)
426
for (DepIterator D = Cache[I].InstVerIter(Cache).DependsList();
427
D.end() == false; D++)
428
if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
429
List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
430
if (I->CurrentVer != 0)
431
for (DepIterator D = I.CurrentVer().DependsList();
432
D.end() == false; D++)
433
if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
434
List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
438
if ((Cache[I].Keep() == true ||
439
Cache[I].InstVerIter(Cache) == I.CurrentVer()) &&
440
I.State() == pkgCache::PkgIterator::NeedsNothing)
443
// Append it to the list
446
if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
447
List->Flag(I,pkgOrderList::Immediate);
450
468
if (Debug == true)
451
469
clog << "Begining to order" << endl;