From 4c48b5618ba15d4e33625cec81843891910e81a2 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 11 Feb 2025 12:11:20 +0100 Subject: solver3: Defer 3.0 'deep' autoremoval to 3.1, fix autoremove Restore the depcache's MarkRequired logic for 3.0 solver; and change the MarkInstall() call to pass a more correct value for FromUser, to not override an existing automatic status. --- apt-pkg/depcache.cc | 2 +- apt-pkg/edsp.cc | 2 +- apt-pkg/solver3.cc | 2 +- apt-pkg/solver3.h | 3 ++- test/integration/solver3.broken | 5 ----- test/integration/test-apt-get-autoremove-real-virtual-provider | 4 ++-- 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index ef93a54bb..b66f2bc66 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -2496,7 +2496,7 @@ static bool MarkPackage(pkgCache::PkgIterator const &Pkg, // pkgDepCache::MarkRequired - the main mark algorithm /*{{{*/ bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc) { - if (_config->Find("APT::Solver", "internal") != "internal") + if (_config->Find("APT::Solver", "internal") != "internal" && _config->Find("APT::Solver") != "3.0") return true; // init the states diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index 88f572f18..dd9ae18fc 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -754,7 +754,7 @@ static bool CreateDumpFile(char const * const id, char const * const type, FileF // EDSP::ResolveExternal - resolve problems by asking external for help {{{*/ bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache, unsigned int const flags, OpProgress *Progress) { - if (strcmp(solver, "3.0") == 0) + if (strstr(solver, "3.") == solver) { APT::Solver s(Cache.GetCache(), Cache.GetPolicy()); FileFd output; diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc index 8af3275eb..44a5075da 100644 --- a/apt-pkg/solver3.cc +++ b/apt-pkg/solver3.cc @@ -976,7 +976,7 @@ bool APT::Solver::ToDepCache(pkgDepCache &depcache) const if (auto RP = reason.Pkg(); RP == P.MapPointer()) reason = (*this)[P].reason; - depcache.MarkInstall(P, false, 0, reason.empty()); + depcache.MarkInstall(P, false, 0, reason.empty() && not(depcache[P].Flags & pkgCache::Flag::Auto)); if (not P->CurrentVer) depcache.MarkAuto(P, not reason.empty()); depcache[P].Marked = 1; diff --git a/apt-pkg/solver3.h b/apt-pkg/solver3.h index 91b852c98..93e4e5116 100644 --- a/apt-pkg/solver3.h +++ b/apt-pkg/solver3.h @@ -217,10 +217,11 @@ class Solver time_t startTime; /// Various configuration options + std::string version{_config->Find("APT::Solver", "3.0")}; // \brief Debug level int debug{_config->FindI("Debug::APT::Solver")}; // \brief If set, we try to keep automatically installed packages installed. - bool KeepAuto{not _config->FindB("APT::Get::AutomaticRemove")}; + bool KeepAuto{version == "3.0" || not _config->FindB("APT::Get::AutomaticRemove")}; // \brief Determines if we are in upgrade mode. bool IsUpgrade{_config->FindB("APT::Solver::Upgrade", false)}; // \brief If set, removals are allowed. diff --git a/test/integration/solver3.broken b/test/integration/solver3.broken index 2212c34ae..540bfbca1 100644 --- a/test/integration/solver3.broken +++ b/test/integration/solver3.broken @@ -1,23 +1,18 @@ test-allow-scores-for-all-dependency-types -test-apt-get-autoremove -test-apt-get-autoremove-kernel-module-providers test-apt-get-upgrade-by-source test-apt-install-file-reltag test-apt-install-order-matters-a-bit test-apt-move-and-forget-manual-sections -test-apt-patterns test-bug-470115-new-and-tighten-recommends test-bug-602412-dequote-redirect test-bug-611729-mark-as-manual test-bug-675449-essential-are-protected test-bug-745046-candidate-propagation-fails -test-bug-753297-upgradable test-bug-767891-force-essential-important test-bug-961266-hold-means-hold test-dont-forget-conflicts-via-unknown-architectures test-explore-or-groups-in-markinstall test-external-dependency-solver-protocol -test-method-mirror test-parse-all-archs-into-cache test-phased-updates-new-depends test-phased-updates-upgrade diff --git a/test/integration/test-apt-get-autoremove-real-virtual-provider b/test/integration/test-apt-get-autoremove-real-virtual-provider index d5438f8b3..7fda4d370 100755 --- a/test/integration/test-apt-get-autoremove-real-virtual-provider +++ b/test/integration/test-apt-get-autoremove-real-virtual-provider @@ -31,7 +31,7 @@ The following packages will be REMOVED: needs-provider1 needs-provider4 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. Remv needs-provider1 [1] -Remv needs-provider4 [1]' aptget autoremove -s --solver 3.0 +Remv needs-provider4 [1]' aptget autoremove -s --solver 3.1 testsuccessequal 'Reading package lists... Building dependency tree... @@ -39,4 +39,4 @@ Reading state information... The following packages will be REMOVED: needs-provider4 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. -Remv needs-provider4 [1]' aptget autoremove -s --solver internal +Remv needs-provider4 [1]' aptget autoremove -s -- cgit v1.2.3-70-g09d2