*/
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;
{
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;
# with enough force however …
cp -a dpkg.status.backup rootdir/var/lib/dpkg/status
+ testsuccess aptget install systemd-sysv -y -t "$1" -o APT::Force-LoopBreak=1 -o Debug::pkgDpkgPm=1
+ cp rootdir/tmp/testsuccess.output apt.output
+ testsuccess grep -- '--force-remove-essential --remove sysvinit' apt.output
testsuccess aptget install systemd-sysv -y -t "$1" -o APT::Force-LoopBreak=1
testdpkginstalled 'sysvinit' 'systemd-sysv'
}
testsuccess aptget install compiz-core-${PKG} -t "${RELEASE}" "$@"
testdpkginstalled compiz-core-${PKG}
+ testsuccess aptget remove compiz-core-${PKG} -y "$@" -o Debug::pkgDpkgPm=1
+ testfailure grep -- '--force-remove-essential' rootdir/tmp/testsuccess.output
testsuccess aptget remove compiz-core-${PKG} -y "$@"
testdpkgnotinstalled compiz-core-${PKG}
testdpkgstatus 'rc' '1' "compiz-core-${PKG}"
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
Purg compiz-core-${PKG}" aptget purge compiz-core-${PKG} -s "$@"
fi
+ testsuccess aptget purge compiz-core-${PKG} -y "$@" -o Debug::pkgDpkgPm=1
+ testfailure grep -- '--force-remove-essential' rootdir/tmp/testsuccess.output
testsuccess aptget purge compiz-core-${PKG} -y "$@"
echo -n '' > rootdir/var/lib/dpkg/available # dpkg -l < 1.16.2 reads the available file by default, where the package can be found
testequalor2 "dpkg-query: no packages found matching compiz-core-${PKG}" "No packages found matching compiz-core-${PKG}." dpkg -l compiz-core-${PKG}