summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-29 16:10:12 +0200
committerJulian Andres Klode <jak@debian.org>2016-08-31 13:18:41 +0200
commit18048c51c1d8cff71f134dd405421baba292944b (patch)
tree4741702fb93bb67f1473e2165d9edb84405c5e1e
parent19883e510af7ea682875d697cb88ad8a21a08d89 (diff)
write auto-bits before calling dpkg & again after if needed
Writing first means that even in the event of a power-failure the autobit is saved for future processing instead of "forgotten" so that the package is treated as manually installed. In some cases we have to re-run the writing after dpkg is done through as dpkg can let packages disappear and in such cases apt will move autobits around (or in that case non-autobits) which we need to store. (cherry picked from commit 309f497b7280a45e3626493318adb6d39ba5c69b)
-rw-r--r--apt-pkg/deb/dpkgpm.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 834cb0e25..23d3ff977 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -1248,6 +1248,11 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
if (RunScriptsWithPkgs("DPkg::Pre-Install-Pkgs") == false)
return false;
+ auto const noopDPkgInvocation = _config->FindB("Debug::pkgDPkgPM",false);
+ // store auto-bits as they are supposed to be after dpkg is run
+ if (noopDPkgInvocation == false)
+ Cache.writeStateFile(NULL);
+
// 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);
@@ -1434,7 +1439,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
J = I;
- if (_config->FindB("Debug::pkgDPkgPM",false) == true)
+ if (noopDPkgInvocation == true)
{
for (std::vector<const char *>::const_iterator a = Args.begin();
a != Args.end(); ++a)
@@ -1613,7 +1618,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
if (pkgPackageManager::SigINTStop)
_error->Warning(_("Operation was interrupted before it could finish"));
- if (_config->FindB("Debug::pkgDPkgPM",false) == false)
+ if (noopDPkgInvocation == false)
{
std::string const oldpkgcache = _config->FindFile("Dir::cache::pkgcache");
if (oldpkgcache.empty() == false && RealFileExists(oldpkgcache) == true &&
@@ -1630,7 +1635,9 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
}
}
- Cache.writeStateFile(NULL);
+ // disappearing packages can forward their auto-bit
+ if (disappearedPkgs.empty() == false)
+ Cache.writeStateFile(NULL);
d->progress->Stop();