summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-07-01 13:17:03 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-07-01 13:36:40 +0200
commite7edb2fef8370d54a4b8e5a01266e6eda81ef84e (patch)
treeea926604af6bc5439594958083c250786f0f264f
parenta0ed43f7323b9d7976ed0ba8d437a42e24af9eaf (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.
-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
+
+