]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/dpkgpm.cc
pass --force-remove-essential to dpkg only if needed
[apt.git] / apt-pkg / deb / dpkgpm.cc
index 23d3ff9778acd7c221a00c1d4a927fb0394997ae..d224a34c03ccee26093c2d0b309c83a21e0a2aca 100644 (file)
@@ -1216,6 +1216,15 @@ void pkgDPkgPM::StopPtyMagic()
  */
 bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
 {
+   auto const ItemIsEssential = [](pkgDPkgPM::Item const &I) {
+      static auto const cachegen = _config->Find("pkgCacheGen::Essential");
+      if (cachegen == "none" || cachegen == "native")
+        return true;
+      if (unlikely(I.Pkg.end()))
+        return true;
+      return (I.Pkg->Flags & pkgCache::Flag::Essential) != 0;
+   };
+
    pkgPackageManager::SigINTStop = false;
    d->progress = progress;
 
@@ -1342,13 +1351,15 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
       {
         case Item::Remove:
         ADDARGC("--force-depends");
-        ADDARGC("--force-remove-essential");
+        if (std::any_of(I, J, ItemIsEssential))
+           ADDARGC("--force-remove-essential");
         ADDARGC("--remove");
         break;
         
         case Item::Purge:
         ADDARGC("--force-depends");
-        ADDARGC("--force-remove-essential");
+        if (std::any_of(I, J, ItemIsEssential))
+           ADDARGC("--force-remove-essential");
         ADDARGC("--purge");
         break;