diff options
Diffstat (limited to 'apt-pkg')
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 15 |
1 files changed, 14 insertions, 1 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 |