diff options
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 10 | ||||
-rwxr-xr-x | test/integration/test-bug-835094-configure-before-purge | 44 | ||||
-rwxr-xr-x | test/integration/test-no-fds-leaked-to-maintainer-scripts | 1 |
3 files changed, 52 insertions, 3 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 5759e6ba5..b0700bcc6 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1535,9 +1535,13 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress) if (I.Op == Item::Remove || I.Op == Item::Purge) toBeRemoved[I.Pkg->ID] = false; - if (std::find(toBeRemoved.begin(), toBeRemoved.end(), true) != toBeRemoved.end()) + bool const RemovePending = std::find(toBeRemoved.begin(), toBeRemoved.end(), true) != toBeRemoved.end(); + bool const PurgePending = approvedStates.Purge().empty() == false; + if (RemovePending != false || PurgePending != false) + List.emplace_back(Item::ConfigurePending, pkgCache::PkgIterator()); + if (RemovePending) List.emplace_back(Item::RemovePending, pkgCache::PkgIterator()); - if (approvedStates.Purge().empty() == false) + if (PurgePending) List.emplace_back(Item::PurgePending, pkgCache::PkgIterator()); // support subpressing of triggers processing for special @@ -1606,7 +1610,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress) unsigned long const Op = I->Op; if (NoTriggers == true && I->Op != Item::TriggersPending && - I->Op != Item::ConfigurePending) + (I->Op != Item::ConfigurePending || std::next(I) != List.end())) { ADDARGC("--no-triggers"); } diff --git a/test/integration/test-bug-835094-configure-before-purge b/test/integration/test-bug-835094-configure-before-purge new file mode 100755 index 000000000..16a196ccd --- /dev/null +++ b/test/integration/test-bug-835094-configure-before-purge @@ -0,0 +1,44 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'kernel' 'amd64' '1' 'unstable' 'Depends: initramfs-tools | linux-initramfs-tool' + +#buildsimplenativepackage 'initramfs-tools' 'amd64' '1.0.16' 'unstable' 'Provides: linux-initramfs-tool' +setupsimplenativepackage 'initramfs-tools' 'amd64' '1' 'unstable' 'Provides: linux-initramfs-tool' +BUILDDIR='incoming/initramfs-tools-1' +mkdir -p "${BUILDDIR}/debian/initramfs-tools/etc" +echo 'foo2=bar2;' > "${BUILDDIR}/init.conf" +echo 'init.conf /etc/init.conf' >> "${BUILDDIR}/debian/install" +buildpackage "$BUILDDIR" 'unstable' 'main' 'native' +rm -rf "$BUILDDIR" + +buildsimplenativepackage 'dracut' 'amd64' '1' 'unstable' 'Provides: linux-initramfs-tool +Conflicts: initramfs-tools' + +setupaptarchive + +testdpkgnotinstalled 'kernel' 'initramfs-tools' 'dracut' +testsuccess apt install kernel -y +testdpkginstalled 'kernel' 'initramfs-tools' +testsuccess test -s rootdir/etc/init.conf +testsuccessequal 'Reading package lists... +Building dependency tree... +Reading state information... +The following packages will be REMOVED: + initramfs-tools* +The following NEW packages will be installed: + dracut +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Purg initramfs-tools [1] [kernel:amd64 ] +Inst dracut (1 unstable [amd64]) +Conf dracut (1 unstable [amd64])' apt install --purge dracut -s +testsuccess apt install --purge dracut -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 +testsuccess apt install --purge dracut -y +testdpkginstalled 'kernel' 'dracut' +testdpkgnotinstalled 'initramfs-tools' +testsuccess test ! -s rootdir/etc/init.conf diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts index 21b394055..baf85e311 100755 --- a/test/integration/test-no-fds-leaked-to-maintainer-scripts +++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts @@ -79,6 +79,7 @@ status half-configured $PKGNAME 1.0 status half-installed $PKGNAME 1.0 status config-files $PKGNAME 1.0 status config-files $PKGNAME 1.0 +startup packages configure startup packages purge remove $PKGNAME 1.0 <none> purge $PKGNAME 1.0 <none> |