summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2010-08-31 12:27:39 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2010-08-31 12:27:39 +0200
commit4429616bd6b13499981da3d7d542f71e4f3ece8c (patch)
tree022af4c899e41935cdfb59ef0ebdbc35094ebba0
parent2d865c7db248d6eab1ba332a79f1a38b764f8c72 (diff)
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
-rw-r--r--apt-pkg/algorithms.cc17
1 files changed, 17 insertions, 0 deletions
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;