// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: orderlist.cc,v 1.6 1999/07/12 03:40:37 jgg Exp $
+// $Id: orderlist.cc,v 1.10 2000/01/16 05:36:17 jgg Exp $
/* ######################################################################
Order List - Represents and Manipulates an ordered list of packages.
{
FileList = 0;
- Primary = &DepUnPackPre;
+ Primary = &pkgOrderList::DepUnPackPre;
Secondary = 0;
RevDepends = 0;
Remove = 0;
{
this->FileList = FileList;
- Primary = &DepUnPackCrit;
- Secondary = &DepConfigure;
- RevDepends = &DepUnPackDep;
- Remove = &DepRemove;
+ Primary = &pkgOrderList::DepUnPackCrit;
+ Secondary = &pkgOrderList::DepConfigure;
+ RevDepends = &pkgOrderList::DepUnPackDep;
+ Remove = &pkgOrderList::DepRemove;
LoopCount = -1;
// Sort
return false;
LoopCount = 0;
- Primary = &DepUnPackPre;
+ Primary = &pkgOrderList::DepUnPackPre;
if (DoRun() == false)
return false;
for (iterator I = List; I != End; I++)
{
PkgIterator P(Cache,*I);
- cout << P.Name() << endl;
+ cout << P.Name() << ' ' << IsMissing(P) << endl;
}*/
return true;
bool pkgOrderList::OrderConfigure()
{
FileList = 0;
- Primary = &DepConfigure;
+ Primary = &pkgOrderList::DepConfigure;
Secondary = 0;
RevDepends = 0;
Remove = 0;
// We order packages with a set state toward the front
int Res;
- if ((Res = BoolCompare(Me->IsNow(A),Me->IsNow(B))) == 0)
+ if ((Res = BoolCompare(Me->IsNow(A),Me->IsNow(B))) != 0)
return -1*Res;
// We order missing files to toward the end
if (Me->FileList != 0)
{
if ((Res = BoolCompare(Me->IsMissing(A),
- Me->IsMissing(B))) == 0)
+ Me->IsMissing(B))) != 0)
return Res;
}
// ---------------------------------------------------------------------
/* This routine calls visit on all providing packages. */
bool pkgOrderList::VisitProvides(DepIterator D,bool Critical)
-{
+{
Version **List = D.AllTargets();
for (Version **I = List; *I != 0; I++)
{
VerIterator Ver(Cache,*I);
PkgIterator Pkg = Ver.ParentPkg();
-
- if (Cache[Pkg].Keep() == true)
+
+ if (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)
continue;
if (D->Type != pkgCache::Dep::Conflicts && Cache[Pkg].InstallVer != *I)
continue;
// Skip over missing files
- if (IsMissing(D.ParentPkg()) == true)
+ if (Critical == false && IsMissing(D.ParentPkg()) == true)
continue;
-
+
if (VisitNode(Pkg) == false)
{
delete [] List;
DepFunc Old = Primary;
// Perform immedate configuration of the package if so flagged.
- if (IsFlag(Pkg,Immediate) == true && Primary != &DepUnPackPre)
- Primary = &DepUnPackPreD;
+ if (IsFlag(Pkg,Immediate) == true && Primary != &pkgOrderList::DepUnPackPre)
+ Primary = &pkgOrderList::DepUnPackPreD;
if (IsNow(Pkg) == true)
{
DepFunc Old = Primary;
bool Res = false;
if (D->Type == pkgCache::Dep::PreDepends)
- Primary = &DepUnPackPreD;
+ Primary = &pkgOrderList::DepUnPackPreD;
Res = VisitProvides(D,true);
Primary = Old;
if (Res == false)