Browse Source

policy: Fix the new policy implementation to handle downgrades correctly

This was broken previously, as we'd choose a downgrade when it's
pin was higher than the previously selected candidate.
Julian Andres Klode 11 years ago
parent
commit
3436218c5f
1 changed files with 8 additions and 9 deletions
  1. 8 9
      apt-pkg/policy.cc

+ 8 - 9
apt-pkg/policy.cc

@@ -231,23 +231,22 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVerNew(pkgCache::PkgIterator const
 {
    // TODO: Replace GetCandidateVer()
    pkgCache::VerIterator cand;
+   pkgCache::VerIterator cur = Pkg.CurrentVer();
    int candPriority = -1;
-   bool candInstalled = false;
    pkgVersioningSystem *vs = Cache->VS;
 
    for (pkgCache::VerIterator ver = Pkg.VersionList(); ver.end() == false; ver++) {
       int priority = GetPriority(ver);
-      bool installed = ver->ID == Pkg.CurrentVer()->ID;
 
-      if (priority < candPriority)
-	 continue;
-      if (priority < 1000
-	  && (priority == candPriority || installed < candInstalled)
-	  && (cand.IsGood() && vs->CmpVersion(ver.VerStr(), cand.VerStr()) < 0))
-	  continue;
+	 if (priority <= candPriority)
+	    continue;
+
+	 // TODO: Maybe optimize to not compare versions
+	 if (!cur.end() && priority < 1000
+	    && (vs->CmpVersion(ver.VerStr(), cur.VerStr()) < 0))
+	    continue;
 
       candPriority = priority;
-      candInstalled = installed;
       cand = ver;
    }