]> git.saurik.com Git - apt.git/commitdiff
do not treat same-version local debs as downgrade
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 1 Jul 2016 12:00:47 +0000 (14:00 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Fri, 1 Jul 2016 12:33:02 +0000 (14:33 +0200)
As the volatile sources are parsed last they were sorted behind the
dpkg/status file and hence are treated as a downgrade, which isn't
really what you want to happen as from a user POV its an upgrade.

apt-pkg/pkgcachegen.cc
test/integration/test-apt-get-install-deb

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)
       }
index 53675c080ec92a3538c1cab099b5ba0112a0e550..3aacc301dcceef5722eddc9546ab95f7d6651a3e 100755 (executable)
@@ -93,6 +93,7 @@ Version: 0
 Priority: extra
 Maintainer: No Body <no@example.org>
 Architecture: all
+Depends: foo:i386
 Description: test package" >> ./incoming/$PKG/DEBIAN/control
        if [ -n "$3" ]; then
                echo -n "$3" >> ./incoming/$PKG/DEBIAN/control
@@ -123,9 +124,12 @@ if [ "$(id -u)" = '0' ]; then
        chmod 700 ./incoming
        testsuccesswithnotice aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall
        testfailure grep 'is already the newest version' rootdir/tmp/testsuccesswithnotice.output
+       chmod 711 ./incoming
 else
        testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall
        testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output
 fi
 
-
+sed -i -e '/^Depends: foo/ d' rootdir/var/lib/dpkg/status
+testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb
+testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output