From cfcdf7fe9f8c925847fe8d8a18bb0996dd9391a5 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 2 Jul 2011 15:33:25 +0100 Subject: The modification to orderlist.cc is from a patch DonKult (David) gave me, The modifications to the packagemanager should fix the test-provides-gone-with-upgrade testcase. --- apt-pkg/orderlist.cc | 6 ++++++ apt-pkg/packagemanager.cc | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index ba43bc757..6dd494027 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -1073,6 +1073,12 @@ bool pkgOrderList::CheckDep(DepIterator D) just needs one */ if (D.IsNegative() == false) { + // ignore provides by older versions of this package + if (((D.Reverse() == false && Pkg == D.ParentPkg()) || + (D.Reverse() == true && Pkg == D.TargetPkg())) && + Cache[Pkg].InstallVer != *I) + continue; + /* Try to find something that does not have the after flag set if at all possible */ if (IsFlag(Pkg,After) == true) diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index f49df8327..2219f876a 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -575,6 +575,9 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg) } bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate) { + if (Debug == true) + clog << "SmartUnPack " << Pkg.Name() << endl; + // Check if it is already unpacked if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure && Cache[Pkg].Keep() == true) @@ -674,6 +677,20 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate) } } } + + // Check for breaks + if (End->Type == pkgCache::Dep::DpkgBreaks) { + SPtrArray VList = End.AllTargets(); + for (Version **I = VList; *I != 0; I++) + { + VerIterator Ver(Cache,*I); + PkgIterator Pkg = Ver.ParentPkg(); + // Found a break, so unpack the package + if (List->IsNow(Pkg)) { + SmartUnPack(Pkg, false); + } + } + } } // Check for reverse conflicts. -- cgit v1.2.3