]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcachegen.cc
save and restore selection states before/after calling dpkg
[apt.git] / apt-pkg / pkgcachegen.cc
index f9d8a8b4b2bfcb4865fdcec8007f08eb814b2012..f0b5a982eb2d4c50248c886584efb701e568b1ae 100644 (file)
@@ -392,8 +392,21 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
         if (Res > 0)
            break;
         // Versionstrings are equal - is hash also equal?
-        if (Res == 0 && List.SameVersion(Hash, Ver) == true)
-           break;
+        if (Res == 0)
+        {
+           if (List.SameVersion(Hash, Ver) == true)
+              break;
+           // sort (volatile) sources above not-sources like the status file
+           if ((CurrentFile->Flags & pkgCache::Flag::NotSource) == 0)
+           {
+              auto VF = Ver.FileList();
+              for (; VF.end() == false; ++VF)
+                 if (VF.File().Flagged(pkgCache::Flag::NotSource) == false)
+                    break;
+              if (VF.end() == true)
+                 break;
+           }
+        }
         // proceed with the next till we have either the right
         // or we found another version (which will be lower)
       }