]> git.saurik.com Git - apt.git/commitdiff
give rc-status packages a pin of -1
authorDavid Kalnischkies <david@kalnischkies.de>
Mon, 25 Apr 2016 12:36:56 +0000 (14:36 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 25 Apr 2016 13:35:52 +0000 (15:35 +0200)
It would previously return a pin of 0, which is an invalid value, but
the intend is that versions which are only in the dpkg/status file can't
be selected for installation (= can't be a candidate) which is what a
negative pin assures.

This helps with the communication to EDSP solvers as they neither know
about the rc-state (yet) nor that they shouldn't choose this version.
Ideally they shouldn't be told about such versions at all as there is
nothing to be solved here, but we will get there eventually.

apt-pkg/policy.cc

index b36f4d4b75f1f611e3b73dc142daf07d68bc9600..7c57f9deaa12dd2b59f888b3cc93ee1bed7ac496 100644 (file)
@@ -374,7 +374,7 @@ APT_PURE signed short pkgPolicy::GetPriority(pkgCache::VerIterator const &Ver, b
    if (!ConsiderFiles)
       return 0;
 
    if (!ConsiderFiles)
       return 0;
 
-   int priority = std::numeric_limits<int>::min();
+   signed short priority = std::numeric_limits<signed short>::min();
    for (pkgCache::VerFileIterator file = Ver.FileList(); file.end() == false; file++)
    {
       /* If this is the status file, and the current version is not the
    for (pkgCache::VerFileIterator file = Ver.FileList(); file.end() == false; file++)
    {
       /* If this is the status file, and the current version is not the
@@ -382,14 +382,13 @@ APT_PURE signed short pkgPolicy::GetPriority(pkgCache::VerIterator const &Ver, b
          then it is not a candidate for installation, ever. This weeds
          out bogus entries that may be due to config-file states, or
          other. */
          then it is not a candidate for installation, ever. This weeds
          out bogus entries that may be due to config-file states, or
          other. */
-      if (file.File().Flagged(pkgCache::Flag::NotSource) && Ver.ParentPkg().CurrentVer() != Ver) {
-        // Ignore
-      } else if (GetPriority(file.File()) > priority) {
-        priority = GetPriority(file.File());
-      }
+      if (file.File().Flagged(pkgCache::Flag::NotSource) && Ver.ParentPkg().CurrentVer() != Ver)
+        priority = std::max(priority, static_cast<decltype(priority)>(-1));
+      else
+        priority = std::max(priority, GetPriority(file.File()));
    }
 
    }
 
-   return priority == std::numeric_limits<int>::min() ? 0 : priority;
+   return priority == std::numeric_limits<decltype(priority)>::min() ? 0 : priority;
 }
 APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &File)
 {
 }
 APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &File)
 {