// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: orderlist.cc,v 1.5 1999/07/04 23:22:53 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;
}
// OrderList::VisitProvides - Visit all of the providing packages /*{{{*/
// ---------------------------------------------------------------------
/* This routine calls visit on all providing packages. */
-bool pkgOrderList::VisitProvides(DepIterator D)
-{
+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)
if (D->Type == pkgCache::Dep::Conflicts && (Version *)Pkg.CurrentVer() != *I)
continue;
+ // Skip over missing files
+ 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;
- Res = VisitProvides(D);
+ Primary = &pkgOrderList::DepUnPackPreD;
+ Res = VisitProvides(D,true);
Primary = Old;
if (Res == false)
return false;
continue;
}
- if (VisitProvides(D) == false)
+ if (VisitProvides(D,true) == false)
return false;
}
return true;
continue;
}
- if (VisitProvides(D) == false)
+ if (VisitProvides(D,true) == false)
return false;
}
return true;
if (CheckDep(D) == true)
continue;
+ // Skip over missing files
+ if (IsMissing(D.ParentPkg()) == true)
+ continue;
+
if (VisitNode(D.ParentPkg()) == false)
return false;
}
else
if (D->Type == pkgCache::Dep::Depends)
- if (VisitProvides(D) == false)
+ if (VisitProvides(D,false) == false)
return false;
}
return true;
for (; D.end() == false; D++)
if (D->Type == pkgCache::Dep::Depends)
- if (VisitProvides(D) == false)
+ if (VisitProvides(D,false) == false)
return false;
return true;
}
continue;
}
+ // Skip over missing files
+ if (IsMissing(D.ParentPkg()) == true)
+ continue;
+
if (VisitNode(D.ParentPkg()) == false)
return false;
}