summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-08 17:31:45 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-08 17:31:45 +0200
commitb4450f1dd6bca537e60406b2383ab154a3e1485f (patch)
tree67ff0903b0dac59c1d307852e4768e63427e92ee
parent007d8b488787f4c33ced5937f22f99f1b759088a (diff)
don't explicitly configure the last round of packages
We end our operation by calling "dpkg --configure -a", so instead of running a (big) configure run with all packages mentioned explicitly before this, we simply skip them and let them be handled by this call implicitly. There isn't really an observeable gain to be had here from a speed point, but it helps in avoiding an (uncommon) problem of having a too long commandline passed to dpkg, which we would split up (probably incorrectly).
-rw-r--r--apt-pkg/deb/dpkgpm.cc15
-rwxr-xr-xtest/integration/test-apt-progress-fd12
-rwxr-xr-xtest/integration/test-apt-progress-fd-deb8224
-rwxr-xr-xtest/integration/test-dpkg-assert-multi-arch9
-rwxr-xr-xtest/integration/test-no-fds-leaked-to-maintainer-scripts3
5 files changed, 25 insertions, 18 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 4a77942f1..4591049a9 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -1248,15 +1248,28 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
if (RunScriptsWithPkgs("DPkg::Pre-Install-Pkgs") == false)
return false;
+ decltype(List)::const_iterator::difference_type const notconfidx =
+ _config->FindB("Dpkg::ExplicitLastConfigure", false) ? std::numeric_limits<decltype(notconfidx)>::max() :
+ std::distance(List.cbegin(), std::find_if_not(List.crbegin(), List.crend(), [](Item const &i) { return i.Op == Item::Configure; }).base());
+
// support subpressing of triggers processing for special
// cases like d-i that runs the triggers handling manually
bool const TriggersPending = _config->FindB("DPkg::TriggersPending", false);
- if (_config->FindB("DPkg::ConfigurePending", true) == true)
+ bool const ConfigurePending = _config->FindB("DPkg::ConfigurePending", true);
+ if (ConfigurePending)
List.push_back(Item(Item::ConfigurePending, PkgIterator()));
// for the progress
BuildPackagesProgressMap();
+ if (notconfidx != std::numeric_limits<decltype(notconfidx)>::max())
+ {
+ if (ConfigurePending)
+ List.erase(std::next(List.cbegin(), notconfidx), std::prev(List.cend()));
+ else
+ List.erase(std::next(List.cbegin(), notconfidx), List.cend());
+ }
+
d->stdin_is_dev_null = false;
// create log
diff --git a/test/integration/test-apt-progress-fd b/test/integration/test-apt-progress-fd
index 86eaa1354..57728ca81 100755
--- a/test/integration/test-apt-progress-fd
+++ b/test/integration/test-apt-progress-fd
@@ -25,8 +25,7 @@ pmstatus:testing:50.0000:Preparing to configure testing (amd64)
pmstatus:dpkg-exec:50.0000:Running dpkg
pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
-pmstatus:testing:83.3333:Installed testing (amd64)
-pmstatus:dpkg-exec:83.3333:Running dpkg'
+pmstatus:testing:83.3333:Installed testing (amd64)'
# upgrade
exec 3> apt-progress.log
@@ -41,8 +40,7 @@ pmstatus:testing:50.0000:Preparing to configure testing (amd64)
pmstatus:dpkg-exec:50.0000:Running dpkg
pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
-pmstatus:testing:83.3333:Installed testing (amd64)
-pmstatus:dpkg-exec:83.3333:Running dpkg'
+pmstatus:testing:83.3333:Installed testing (amd64)'
# reinstall
exec 3> apt-progress.log
@@ -57,8 +55,7 @@ pmstatus:testing:50.0000:Preparing to configure testing (amd64)
pmstatus:dpkg-exec:50.0000:Running dpkg
pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
-pmstatus:testing:83.3333:Installed testing (amd64)
-pmstatus:dpkg-exec:83.3333:Running dpkg'
+pmstatus:testing:83.3333:Installed testing (amd64)'
# and remove
exec 3> apt-progress.log
@@ -83,7 +80,6 @@ pmstatus:testing2:50.0000:Preparing to configure testing2 (i386)
pmstatus:dpkg-exec:50.0000:Running dpkg
pmstatus:testing2:50.0000:Configuring testing2 (i386)
pmstatus:testing2:66.6667:Configuring testing2 (i386)
-pmstatus:testing2:83.3333:Installed testing2 (i386)
-pmstatus:dpkg-exec:83.3333:Running dpkg'
+pmstatus:testing2:83.3333:Installed testing2 (i386)'
rm -f apt-progress*.log
diff --git a/test/integration/test-apt-progress-fd-deb822 b/test/integration/test-apt-progress-fd-deb822
index a8d59608d..d9a4505d1 100755
--- a/test/integration/test-apt-progress-fd-deb822
+++ b/test/integration/test-apt-progress-fd-deb822
@@ -58,10 +58,6 @@ Status: progress
Package: testing:amd64
Percent: 83.3333
Message: Installed testing (amd64)
-
-Status: progress
-Percent: 83.3333
-Message: Running dpkg
'
rm -f apt-progress*.log
diff --git a/test/integration/test-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch
index f73c78935..14b29ec87 100755
--- a/test/integration/test-dpkg-assert-multi-arch
+++ b/test/integration/test-dpkg-assert-multi-arch
@@ -16,12 +16,15 @@ setupaptarchive
testqualifier() {
msgtest 'Test with' $1 'for correct qualifier mode' $2
- GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -v -- '--unpack' | sed -e 's/^.*--[^u][^ ]* \([^ ]*\).*$/\1/')"
+ #aptget install $1 -qq -o Debug::pkgDPkgPM=1 || true
+ aptget install $1 -qq -o Debug::pkgDPkgPM=1 -o Dpkg::ExplicitLastConfigure=1 > testqualifier.output 2>&1 || true
+ GIVEN="$(grep -v -- '--unpack' testqualifier.output | sed -e 's/^.*--[^u][^ ]* \([^ ]*\).*$/\1/')"
if [ "$GIVEN" = "$2" ]; then
msgpass
else
- echo
- echo "$GIVEN"
+ cat >&2 testqualifier.output
+ echo >&2
+ echo >&2 "$GIVEN"
msgfail
fi
}
diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts
index d86e638cd..56cbff095 100755
--- a/test/integration/test-no-fds-leaked-to-maintainer-scripts
+++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts
@@ -59,8 +59,7 @@ startup packages configure
configure $PKGNAME 1.0 <none>
status unpacked $PKGNAME 1.0
status half-configured $PKGNAME 1.0
-status installed $PKGNAME 1.0
-startup packages configure" cut -f 3- -d' ' rootdir/var/log/dpkg.log
+status installed $PKGNAME 1.0" cut -f 3- -d' ' rootdir/var/log/dpkg.log
}
checkinstall