#!/bin/sh set -e TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'i386' buildsimplenativepackage 'unrelated' 'all' '1' 'unstable' buildsimplenativepackage 'po-debconf' 'all' '1.0.16' 'unstable' buildsimplenativepackage 'debhelper' 'all' '8.0.0' 'unstable' 'Depends: po-debconf' buildsimplenativepackage 'base-files' 'all' '10' 'unstable' 'Essential: yes' buildsimplenativepackage 'fdisk' 'all' '2.30.2' 'unstable' 'XB-Important: yes' buildsimplenativepackage 'linux-image' 'all' '4.9.80' 'unstable' buildsimplenativepackage 'hold-me' 'all' '1.0' 'unstable' buildsimplenativepackage 'remove-me' 'all' '1.0' 'unstable' buildsimplenativepackage 'system-base' 'all' '1.0' 'unstable' 'Depends: unrelated, base-files, fdisk, linux-image, hold-me, remove-me' setupaptarchive testsuccess aptget install unrelated debhelper -y testdpkginstalled 'unrelated' 'debhelper' 'po-debconf' testmarkedauto 'po-debconf' testsuccess aptget remove debhelper -y testdpkgnotinstalled 'debhelper' testdpkginstalled 'po-debconf' 'unrelated' echo 'unrelated purge' | dpkg --set-selections testdpkgstatus 'pi' '1' 'unrelated' echo 'APT::NeverAutoRemove { "^debc.*nf$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget autoremove -s for sudouser in '_apt' ''; do if [ -n "$sudouser" ]; then export SUDO_USER="$sudouser" AUTOREMOVE='sudo apt autoremove' else unset SUDO_USER AUTOREMOVE='apt autoremove' fi testequal "Reading package lists... Building dependency tree... Reading state information... The following package was automatically installed and is no longer required: po-debconf Use '$AUTOREMOVE' to remove it. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s testequal "Reading package lists... Building dependency tree... Reading state information... 1 package was automatically installed and is no longer required. Use '$AUTOREMOVE' to remove it. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small testequal "Reading package lists... Building dependency tree... Reading state information... Calculating upgrade... The following package was automatically installed and is no longer required: po-debconf Use '$AUTOREMOVE' to remove it. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget upgrade -s done testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget install -s --autoremove testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... Calculating upgrade... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget upgrade -s --autoremove testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget install -s '?garbage-' testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget remove -s '?garbage' testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... Calculating upgrade... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget upgrade -s '?garbage-' echo 'APT::Get::AutomaticRemove "true";' > rootdir/etc/apt/apt.conf.d/autoremoval testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: po-debconf 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv po-debconf [1.0.16]' aptget install -s testequal "Reading package lists... Building dependency tree... Reading state information... Calculating upgrade... The following package was automatically installed and is no longer required: po-debconf Use 'apt autoremove' to remove it. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget upgrade -s rm -f rootdir/etc/apt/apt.conf.d/autoremoval testdpkginstalled 'po-debconf' echo 'APT::NeverAutoRemove { "^po-debconf$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove testsuccess aptget autoremove -y testdpkginstalled 'po-debconf' testdpkgstatus 'pi' '1' 'unrelated' echo 'APT::NeverAutoRemove { "^po-.*$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove testsuccess aptget autoremove -y testdpkginstalled "po-debconf" testdpkgstatus 'pi' '1' 'unrelated' rm rootdir/etc/apt/apt.conf.d/00autoremove testsuccess aptget autoremove -y testdpkgnotinstalled 'po-debconf' testdpkgstatus 'pi' '1' 'unrelated' testmarkedauto sed rootdir/var/log/apt/history.log -e '/^Commandline: / d' \ -e '/^Start-Date: / d' -e '/^End-Date: / d' \ -e '/^Requested-By: / d' \ -e 's#), #)\nInstall: #g' | sort -u > apt-history.log testfileequal 'apt-history.log' ' Install: debhelper:i386 (8.0.0) Install: po-debconf:i386 (1.0.16, automatic) Install: unrelated:i386 (1) Remove: debhelper:i386 (8.0.0) Remove: po-debconf:i386 (1.0.16)' testsuccess aptget install debhelper -y testdpkgstatus 'pi' '1' 'unrelated' testdpkginstalled 'debhelper' 'po-debconf' testsuccess aptmark auto debhelper testmarkedauto 'debhelper' 'po-debconf' testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: debhelper po-debconf 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. Remv debhelper [8.0.0] Remv po-debconf [1.0.16]' aptget autoremove -s testequal "Reading package lists... Building dependency tree... Reading state information... The following packages were automatically installed and are no longer required: debhelper po-debconf Use 'apt autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s testequal "Reading package lists... Building dependency tree... Reading state information... 2 packages were automatically installed and are no longer required. Use 'apt autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small testsuccess aptmark hold debhelper testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget autoremove -s testsuccess aptget autoremove debhelper -y --allow-change-held-packages testdpkgnotinstalled 'po-debconf' 'debhelper' testdpkgstatus 'pi' '1' 'unrelated' testmarkedauto testsuccess aptget install debhelper --solver apt -y -o Debug::pkgDepCache::Marker=1 testmarkedauto 'po-debconf' testdpkgstatus 'pi' '1' 'unrelated' testsuccess aptget install system-base debhelper -y testdpkginstalled 'debhelper' 'po-debconf' 'system-base' 'base-files' 'fdisk' 'linux-image' 'hold-me' 'remove-me' testsuccess aptmark hold 'hold-me' echo 'APT::NeverAutoRemove { "^linux-image$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove testsuccess aptget remove system-base -y testsuccess aptget autoremove -y -o Debug::pkgAutoRemove=yes DEBUGLOG=${TMPWORKINGDIRECTORY}/rootdir/tmp/autoremove.debuglog cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$DEBUGLOG" testsuccess grep -Fx 'Marking: fdisk:i386 2.30.2 (Important)' "$DEBUGLOG" testsuccess grep -Fx 'Marking: base-files:i386 10 (Essential)' "$DEBUGLOG" testsuccess grep -Fx 'Marking: unrelated:i386 1 (Manual-Installed)' "$DEBUGLOG" testsuccess grep -Fx 'Marking: hold-me:i386 1.0 (Hold)' "$DEBUGLOG" testsuccess grep -Fx 'Marking: po-debconf:i386 1.0.16 (Dependency)' "$DEBUGLOG" testsuccess grep -Fx 'Marking: linux-image:i386 4.9.80 (Blacklisted [APT::NeverAutoRemove])' "$DEBUGLOG" testdpkginstalled 'debhelper' 'po-debconf' 'base-files' 'fdisk' 'linux-image' testdpkgstatus 'hi' '1' 'hold-me' testdpkgnotinstalled 'remove-me' testdpkgstatus 'pi' '1' 'unrelated' insertinstalledpackage 'bar' 'all' '1' 'Depends: foo-provider' insertinstalledpackage 'foo-multi1-1' 'all' '1' 'Provides: foo-provider Source: foo-multi (1)' insertinstalledpackage 'foo-multi1-2' 'all' '1' 'Provides: foo-provider Source: foo-multi (2)' insertinstalledpackage 'foo-multi1-3' 'all' '1' 'Provides: foo-provider Source: foo-multi (3)' insertinstalledpackage 'foo-multi2-1' 'all' '1' 'Provides: foo-provider Source: foo-multi (1)' insertinstalledpackage 'foo-multi2-2' 'all' '1' 'Provides: foo-provider Source: foo-multi (2)' insertinstalledpackage 'foo-multi2-3' 'all' '1' 'Provides: foo-provider Source: foo-multi (3)' insertinstalledpackage 'foo-plus-1' 'all' '1' 'Provides: foo-provider Source: foo-plus (1)' insertinstalledpackage 'foo-plus-2' 'all' '1' 'Provides: foo-provider Source: foo-plus (2)' insertinstalledpackage 'foo-plus-3' 'all' '1' 'Provides: foo-provider Source: foo-plus (3)' insertinstalledpackage 'foo-single-1' 'all' '1' 'Provides: foo-provider' insertinstalledpackage 'foo-single-2' 'all' '1' 'Provides: foo-provider' testsuccess aptmark auto 'foo-*' testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: foo-multi1-1 foo-multi1-2 foo-multi2-1 foo-multi2-2 foo-plus-1 foo-plus-2 0 upgraded, 0 newly installed, 6 to remove and 0 not upgraded. Remv foo-multi1-1 [1] Remv foo-multi1-2 [1] Remv foo-multi2-1 [1] Remv foo-multi2-2 [1] Remv foo-plus-1 [1] Remv foo-plus-2 [1]' apt autoremove -s testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: foo-multi1-1* foo-multi1-2* foo-multi2-1* foo-multi2-2* foo-plus-1* foo-plus-2* 0 upgraded, 0 newly installed, 6 to remove and 0 not upgraded. Purg foo-multi1-1 [1] Purg foo-multi1-2 [1] Purg foo-multi2-1 [1] Purg foo-multi2-2 [1] Purg foo-plus-1 [1] Purg foo-plus-2 [1]' apt autopurge -s testdpkgstatus 'pi' '1' 'unrelated' testsuccess apt purge unrelated -y insertinstalledpackage 'foo-has-update' 'all' '1' insertpackage 'stable' 'foo-has-update' 'all' '2' testsuccess aptmark auto 'foo-has-update' setupaptarchive # Test removed package version (with -V flag), when package has update testsuccessequal 'Reading package lists... Building dependency tree... Reading state information... The following packages will be REMOVED: foo-has-update (1) foo-multi1-1 (1) foo-multi1-2 (1) foo-multi2-1 (1) foo-multi2-2 (1) foo-plus-1 (1) foo-plus-2 (1) 0 upgraded, 0 newly installed, 7 to remove and 0 not upgraded. Remv foo-has-update [1] Remv foo-multi1-1 [1] Remv foo-multi1-2 [1] Remv foo-multi2-1 [1] Remv foo-multi2-2 [1] Remv foo-plus-1 [1] Remv foo-plus-2 [1]' apt autoremove -sV # Test automatic removed package version (with -V flag), when package has update testsuccessequal "Reading package lists... Building dependency tree... Reading state information... The following packages were automatically installed and are no longer required: foo-has-update (1) foo-multi1-1 (1) foo-multi1-2 (1) foo-multi2-1 (1) foo-multi2-2 (1) foo-plus-1 (1) foo-plus-2 (1) Use 'apt autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded." apt remove -sV