]> git.saurik.com Git - apt.git/commitdiff
apt-cache: Modify policy output to use per-version pins
authorJulian Andres Klode <jak@debian.org>
Wed, 12 Aug 2015 11:08:51 +0000 (13:08 +0200)
committerJulian Andres Klode <jak@debian.org>
Wed, 12 Aug 2015 11:08:51 +0000 (13:08 +0200)
Also optionally enable old output by setting APT::Policy=0.

cmdline/apt-cache.cc

index e61914298ba8fefb2d3afcb647779ad343c56a84..b9da85b342d338adb7981fb673c0d112ba7dab5f 100644 (file)
@@ -1667,19 +1667,33 @@ static bool Policy(CommandLine &CmdL)
       pkgCache::PkgIterator I = Cache->PkgBegin();
       for (;I.end() != true; ++I)
       {
-        if (Plcy->GetPriority(I) == 0)
+        // Old code for debugging
+        if (_config->FindI("APT::Policy", 1) < 1) {
+           if (Plcy->GetPriority(I) == 0)
+              continue;
+
+           // Print the package name and the version we are forcing to
+           cout << "     " << I.FullName(true) << " -> ";
+
+           pkgCache::VerIterator V = Plcy->GetMatch(I);
+           if (V.end() == true)
+              cout << _("(not found)") << endl;
+           else
+              cout << V.VerStr() << endl;
+
            continue;
+        }
+        // New code
+        for (pkgCache::VerIterator V = I.VersionList(); !V.end(); V++) {
+           auto Prio = Plcy->GetPriority(V, false);
+           if (Prio == 0)
+              continue;
 
-        // Print the package name and the version we are forcing to
-        cout << "     " << I.FullName(true) << " -> ";
-        
-        pkgCache::VerIterator V = Plcy->GetMatch(I);
-        if (V.end() == true)
-           cout << _("(not found)") << endl;
-        else
-           cout << V.VerStr() << endl;
-      }     
-      
+           // Print the package name and the version we are forcing to
+           cout << "     " << I.FullName(true) << " -> ";
+           cout << V.VerStr() << _(" with priority ") << Prio << endl;
+        }
+      }
       return true;
    }
 
@@ -1715,7 +1729,7 @@ static bool Policy(CommandLine &CmdL)
         cout << V.VerStr() << endl;
 
       // Pinned version
-      if (Plcy->GetPriority(Pkg) != 0)
+      if (_config->FindI("APT::Policy", 1) < 1 && Plcy->GetPriority(Pkg) != 0)
       {
         cout << _("  Package pin: ");
         V = Plcy->GetMatch(Pkg);
@@ -1733,7 +1747,10 @@ static bool Policy(CommandLine &CmdL)
            cout << " *** " << V.VerStr();
         else
            cout << "     " << V.VerStr();
-        cout << " " << Plcy->GetPriority(V) << endl;
+        if (_config->FindI("APT::Policy", 1) < 1)
+           cout << " " << Plcy->GetPriority(Pkg) << endl;
+        else
+           cout << " " << Plcy->GetPriority(V) << endl;
         for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF)
         {
            // Locate the associated index files so we can derive a description