Browse Source

Remove and Unpack operations should not be ignored for pseudo packages -

they should trigger the remove/unpack of the "all" package.
Otherwise - as this package has no dependencies - it will be triggered
to late. The Configuration step doesn't need it as the "all" package is
a dependency of the pseudo-package, so it will be configured before
the pseudo packages are tried: So at this step the ignorance is okay.

Also IsMissing() should report the status of the all package if an
pseudo package is checked instead of always reporting no-miss.
tags/debian/0.8.0
David Kalnischkies 11 years ago
parent
commit
70ae240915
2 changed files with 15 additions and 9 deletions
  1. +6
    -5
      apt-pkg/orderlist.cc
  2. +9
    -4
      apt-pkg/packagemanager.cc

+ 6
- 5
apt-pkg/orderlist.cc View File

@@ -127,8 +127,9 @@ bool pkgOrderList::IsMissing(PkgIterator Pkg)
if (FileList[Pkg->ID].empty() == false)
return false;

// Missing Pseudo packages are missing if the real package is missing
if (pkgCache::VerIterator(Cache, Cache[Pkg].CandidateVer).Pseudo() == true)
return false;
return IsMissing(Pkg.Group().FindPkg("all"));

return true;
}
@@ -203,7 +204,7 @@ bool pkgOrderList::OrderCritical()
{
PkgIterator P(Cache,*I);
if (IsNow(P) == true)
clog << " " << P.Name() << ' ' << IsMissing(P) << ',' << IsFlag(P,After) << endl;
clog << " " << P.FullName() << ' ' << IsMissing(P) << ',' << IsFlag(P,After) << endl;
}
}

@@ -276,7 +277,7 @@ bool pkgOrderList::OrderUnpack(string *FileList)
{
PkgIterator P(Cache,*I);
if (IsNow(P) == true)
clog << " " << P.Name() << ' ' << IsMissing(P) << ',' << IsFlag(P,After) << endl;
clog << " " << P.FullName() << ' ' << IsMissing(P) << ',' << IsFlag(P,After) << endl;
}
}

@@ -547,7 +548,7 @@ bool pkgOrderList::VisitNode(PkgIterator Pkg)
if (Debug == true)
{
for (int j = 0; j != Depth; j++) clog << ' ';
clog << "Visit " << Pkg.Name() << endl;
clog << "Visit " << Pkg.FullName() << endl;
}
Depth++;
@@ -606,7 +607,7 @@ bool pkgOrderList::VisitNode(PkgIterator Pkg)
if (Debug == true)
{
for (int j = 0; j != Depth; j++) clog << ' ';
clog << "Leave " << Pkg.Name() << ' ' << IsFlag(Pkg,Added) << ',' << IsFlag(Pkg,AddPending) << endl;
clog << "Leave " << Pkg.FullName() << ' ' << IsFlag(Pkg,Added) << ',' << IsFlag(Pkg,AddPending) << endl;
}
return true;


+ 9
- 4
apt-pkg/packagemanager.cc View File

@@ -470,6 +470,8 @@ bool pkgPackageManager::SmartRemove(PkgIterator Pkg)

if (pkgCache::VerIterator(Cache, Cache[Pkg].CandidateVer).Pseudo() == false)
return Remove(Pkg,(Cache[Pkg].iFlags & pkgDepCache::Purge) == pkgDepCache::Purge);
else
return SmartRemove(Pkg.Group().FindPkg("all"));
return true;
}
/*}}}*/
@@ -584,11 +586,14 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg)
for (PrvIterator P = Cache[Pkg].InstVerIter(Cache).ProvidesList();
P.end() == false; P++)
CheckRConflicts(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion());
if (pkgCache::VerIterator(Cache, Cache[Pkg].CandidateVer).Pseudo() == false &&
Install(Pkg,FileNames[Pkg->ID]) == false)

if (pkgCache::VerIterator(Cache, Cache[Pkg].CandidateVer).Pseudo() == false)
{
if(Install(Pkg,FileNames[Pkg->ID]) == false)
return false;
} else if (SmartUnPack(Pkg.Group().FindPkg("all")) == false)
return false;
List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
// Perform immedate configuration of the package.


Loading…
Cancel
Save