From 4429616bd6b13499981da3d7d542f71e4f3ece8c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 31 Aug 2010 12:27:39 +0200 Subject: apt-pkg/algorithms.cc: in the case of conflicts/breaks against a Provide Start.AllTarget() returns all non-canidates as well, we want to filter them out --- apt-pkg/algorithms.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 3c8711b74..a46dce2db 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -987,6 +987,23 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) pkgCache::VerIterator Ver(Cache,*V); pkgCache::PkgIterator Pkg = Ver.ParentPkg(); + /* Ignore a target that is not a candidate + This can happen if: + installed package provides video-6 + candidate provides video-8 + now if a package Start breaks/conflicts video-6 + Start.AllTargets() will return the now-installed + versions even though these are not candidates + we can ignore them + */ + if (Cache[Pkg].CandidateVerIter(Cache) != Ver) + { + clog << " Version " << Ver.VerStr() << " for " + << Pkg.Name() << " is not a candidate, ignoring" + << endl; + continue; + } + if (Debug == true) clog << " Considering " << Pkg.FullName(false) << ' ' << (int)Scores[Pkg->ID] << " as a solution to " << I.FullName(false) << ' ' << (int)Scores[I->ID] << endl; -- cgit v1.2.3 From 914cc8a4438fd4f8c060599fa1971b80236a016e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 31 Aug 2010 13:27:59 +0200 Subject: apt-pkg/algorithms.cc: if a package was added to the kill list via a DpkgBreaks, make sure to break in the loop (just like for a conflict) --- apt-pkg/algorithms.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index a46dce2db..d9e0d2f81 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1097,7 +1097,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) if (Start->Type == pkgCache::Dep::DpkgBreaks) { - // first, try upgradring the package, if that + // first, try upgrading the package, if that // does not help, the breaks goes onto the // kill list // FIXME: use DoUpgrade(Pkg) instead? @@ -1122,6 +1122,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) LEnd++; if (Start->Type != pkgCache::Dep::Conflicts && + Start->Type != pkgCache::Dep::DpkgBreaks && Start->Type != pkgCache::Dep::Obsoletes) break; } -- cgit v1.2.3 From 24e936625600312682a34872a2425f3382f3df2f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 31 Aug 2010 13:32:50 +0200 Subject: apt-pkg/algorithms.cc: show debug output only if debug option is given --- apt-pkg/algorithms.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index d9e0d2f81..bd9a9df62 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -998,9 +998,10 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) */ if (Cache[Pkg].CandidateVerIter(Cache) != Ver) { - clog << " Version " << Ver.VerStr() << " for " - << Pkg.Name() << " is not a candidate, ignoring" - << endl; + if (Debug) + clog << " Version " << Ver.VerStr() << " for " + << Pkg.Name() << " is not a candidate, ignoring" + << endl; continue; } -- cgit v1.2.3