diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2010-03-01 15:27:55 +0100 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2010-03-01 15:27:55 +0100 |
commit | 70ae240915df3ef89715d71d5fe7a6910cbf057e (patch) | |
tree | 727e35d94ad2dcafcdb7aa41375c299fbeeedba3 | |
parent | 4a6d21639f807ae82d5a51a92c4bbbd0ca2a4494 (diff) |
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.
-rw-r--r-- | apt-pkg/orderlist.cc | 11 | ||||
-rw-r--r-- | apt-pkg/packagemanager.cc | 13 |
2 files changed, 15 insertions, 9 deletions
diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index 2e7618b55..7c950292a 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -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; diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index db882721e..35cc24550 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -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. |