]> git.saurik.com Git - apt.git/commitdiff
reinstalling local deb file is no downgrade
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 1 Jul 2016 11:17:03 +0000 (13:17 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Fri, 1 Jul 2016 11:36:40 +0000 (13:36 +0200)
If we have a (e.g. locally built) deb file installed and do try to
install it again apt complained about this being a downgrade, but it
wasn't as it is the very same version… it was just confused into not
merging the versions together which looks like a downgrade then.

The same size assumption is usually good, but given that volatile files
are parsed last (even after the status file) the base assumption no
longer holds, but is easy to adept without actually changing anything in
practice.

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

index e24ced27189fff38650ab555f29623c585e99c56..f7f64debdda1de3b75dd1c68ede503e24765e720 100644 (file)
@@ -999,7 +999,7 @@ bool debListParser::SameVersion(unsigned short const Hash,          /*{{{*/
    // status file is parsed last, so the first version we encounter is
    // probably also the version we have downloaded
    unsigned long long const Size = Section.FindULL("Size");
-   if (Size != 0 && Size != Ver->Size)
+   if (Size != 0 && Ver->Size != 0 && Size != Ver->Size)
       return false;
    // available everywhere, but easier to check here than to include in VersionHash
    unsigned char MultiArch = ParseMultiArch(false);
index 1e9520fe68890ca89995b9333709212f7a488952..53675c080ec92a3538c1cab099b5ba0112a0e550 100755 (executable)
@@ -45,8 +45,10 @@ testsuccess aptget install ./incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1
 testdpkginstalled 'foo:i386'
 testfailure aptget install incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1
 cd downloaded
-testsuccess aptget install "$(readlink -f ../incoming/foo_1.0_i386.deb)" -o Debug::pkgCacheGen=1 -y --allow-downgrades
-testsuccess aptget install ../incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1 -y --allow-downgrades
+testsuccess aptget install "$(readlink -f ../incoming/foo_1.0_i386.deb)" -o Debug::pkgCacheGen=1 -y --reinstall
+testfailure grep 'is already the newest version' ../rootdir/tmp/testsuccess.output
+testsuccess aptget install ../incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1 -y --reinstall
+testfailure grep 'is already the newest version' ../rootdir/tmp/testsuccess.output
 cd ..
 
 testsuccessequal "Reading package lists...
@@ -109,13 +111,21 @@ testsuccess aptget install ./incoming/pkg-as-it-should-be_0_all.deb
 testsuccess aptget install ./incoming/pkg-leading-newline_0_all.deb
 testsuccess aptget install ./incoming/pkg-trailing-newline_0_all.deb
 
-# see if permission dropping is checked before usage
+testempty apt clean
 if [ "$(id -u)" = '0' ]; then
-       apt clean
+       # see if permission dropping is checked before usage
        chmod 711 ./incoming
-       testsuccess aptget install -y --allow-downgrades ./incoming/pkg-as-it-should-be_0_all.deb
+       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
        chmod 710 ./incoming
-       testsuccesswithnotice aptget install -y --allow-downgrades ./incoming/pkg-as-it-should-be_0_all.deb
+       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 700 ./incoming
-       testsuccesswithnotice aptget install -y --allow-downgrades ./incoming/pkg-as-it-should-be_0_all.deb
+       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
+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
+
+