summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-07-01 13:17:03 +0200
committerJulian Andres Klode <jak@debian.org>2016-08-31 13:49:37 +0200
commit574ce54dae3089d6d2886bac6b8895510b0ececb (patch)
treec74f9f44b1d7c38ac199883e6f6257b36d659b91
parent267314664da07b892bff7c2ee8060faaa3bed74d (diff)
reinstalling local deb file is no downgrade
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. (cherry picked from commit e7edb2fef8370d54a4b8e5a01266e6eda81ef84e)
-rw-r--r--apt-pkg/deb/deblistparser.cc2
-rwxr-xr-xtest/integration/test-apt-get-install-deb24
2 files changed, 18 insertions, 8 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index e24ced271..f7f64debd 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -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);
diff --git a/test/integration/test-apt-get-install-deb b/test/integration/test-apt-get-install-deb
index 1e9520fe6..53675c080 100755
--- a/test/integration/test-apt-get-install-deb
+++ b/test/integration/test-apt-get-install-deb
@@ -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
+
+