#!/bin/sh set -e TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' 'i386' # regression test for #754904 cat > foo.rpm < rootdir/etc/apt/preferences testsuccessequal "Reading package lists... Building dependency tree... Reading state information... Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb' The following packages will be REMOVED: foo:i386 The following NEW packages will be installed: foo 0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. Remv foo:i386 [1.0] Inst foo (1.0 local-deb [amd64]) Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s createpkg() { local PKG="pkg-$1" mkdir -p ./incoming/$PKG/DEBIAN if [ -n "$2" ]; then echo -n "$2" >> ./incoming/$PKG/DEBIAN/control fi echo "Package: $PKG Version: 0 Priority: extra Maintainer: No Body Architecture: all Depends: foo:i386 Description: test package" >> ./incoming/$PKG/DEBIAN/control if [ -n "$3" ]; then echo -n "$3" >> ./incoming/$PKG/DEBIAN/control fi testsuccess dpkg-deb --build ./incoming/$PKG/ ./incoming #dpkg-deb -I ./incoming/${PKG}_0_all.deb control } createpkg 'as-it-should-be' createpkg 'leading-newline' ' ' createpkg 'trailing-newline' '' ' ' createpkg 'double-trailing-newline' '' ' ' createpkg 'last-line-parse' '' 'Pre-Depends: pkg-as-it-should-be ' echo 'Package: /pkg-/ Pin: release a=experimental Pin-Priority: 501' > rootdir/etc/apt/preferences.d/pinit testfailuremsg 'E: Unable to correct problems, you have held broken packages.' aptget install -q=0 ./incoming/pkg-last-line-parse_0_all.deb testsuccess aptget install ./incoming/pkg-as-it-should-be_0_all.deb testsuccess aptget install ./incoming/pkg-last-line-parse_0_all.deb testsuccess aptget install "$(readlink -f ./incoming/pkg-leading-newline_0_all.deb)" testsuccess aptget install ./incoming/pkg-trailing-newline_0_all.deb testsuccess aptget install ./incoming/pkg-double-trailing-newline_0_all.deb testempty apt clean if [ "$(id -u)" = '0' ]; then # see if permission dropping is checked before usage chmod 711 ./incoming 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 ./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 ./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 testsuccess apt purge -y pkg-as-it-should-be echo "Package: pkg-as-it-should-be Architecture: all Version: 0 Installed-Size: 2903 Filename: incoming/pkg-as-it-should-be_0%3a0+0_all.deb Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.deb) SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.deb | cut -d' ' -f 1) " > Packages ln -s pkg-as-it-should-be_0_all.deb incoming/pkg-as-it-should-be_0%3a0+0_all.deb testdpkgnotinstalled 'pkg-as-it-should-be' testnopackage pkg-as-it-should-be testsuccess apt install --with-source ./Packages pkg-as-it-should-be -s testsuccess apt install --with-source ./Packages pkg-as-it-should-be --print-uris testsuccess apt show --with-source ./Packages pkg-as-it-should-be testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output testsuccess apt install -y --with-source ./Packages pkg-as-it-should-be -o Debug::pkgAcquire::Worker=1 testdpkginstalled 'pkg-as-it-should-be' rm -f ./Packages echo 'dpkg::install::recursive "true"; dpkg::install::recursive::force "true"; dpkg::install::recursive::minimum "0";' > rootdir/etc/apt/apt.conf.d/lowerminimum.conf mv ./incoming/pkg-as-it-should-be_0_all.deb ./incoming/pkg-as-it-should-be_0%3a0+0_all.ddeb testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0%3a0+0_all.ddeb --reinstall testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output testsuccess apt purge -y pkg-as-it-should-be testdpkgnotinstalled 'pkg-as-it-should-be' mv ./incoming/pkg-as-it-should-be_0%3a0+0_all.ddeb ./incoming/pkg-as-it-should-be_0_all.foobar echo "Package: pkg-as-it-should-be Architecture: all Version: 0 Installed-Size: 2903 Filename: incoming/pkg-as-it-should-be_0_all.foobar Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.foobar) SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.foobar | cut -d' ' -f 1) " | gzip > Packages.gz testsuccess apt install --with-source ./Packages.gz pkg-as-it-should-be -s testsuccess apt install --with-source ./Packages.gz pkg-as-it-should-be --print-uris testsuccess apt show --with-source ./Packages.gz pkg-as-it-should-be testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output testsuccess apt install -y --with-source ./Packages.gz pkg-as-it-should-be testdpkginstalled 'pkg-as-it-should-be'