]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/policy.cc
* cmdline/apt-get.cc:
[apt.git] / apt-pkg / policy.cc
index 0b8c1a81bedc7f81e4b8949c06b9a285da850f76..9b24c2ef183dad1b8fe7e26f50e94e836055c4e6 100644 (file)
@@ -121,6 +121,10 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
    signed Max = GetPriority(Pkg);
    pkgCache::VerIterator Pref = GetMatch(Pkg);
 
+   // Alternatives in case we can not find our package pin (Bug#512318).
+   signed MaxAlt = 0;
+   pkgCache::VerIterator PrefAlt;
+
    // no package = no candidate version
    if (Pkg.end() == true)
       return Pref;
@@ -159,6 +163,11 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
         {
            Pref = Ver;
            Max = Prio;
+        }
+        if (Prio > MaxAlt)
+        {
+           PrefAlt = Ver;
+           MaxAlt = Prio;
         }       
       }      
       
@@ -175,6 +184,11 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
            break;
       }            
    }
+   // If we do not find our candidate, use the one with the highest pin.
+   // This means that if there is a version available with pin > 0; there
+   // will always be a candidate (Closes: #512318)
+   if (!Pref.IsGood() && MaxAlt > 0)
+       Pref = PrefAlt;
    return Pref;
 }
                                                                        /*}}}*/