diff options
| author | Julian Andres Klode <julian.klode@canonical.com> | 2025-03-20 21:15:14 +0100 |
|---|---|---|
| committer | Julian Andres Klode <julian.klode@canonical.com> | 2025-03-20 22:22:17 +0100 |
| commit | 81804cefd8c24c98e7a0216a9d4277516e19b6e2 (patch) | |
| tree | 4601ec604e90b2513d8b80278861fee29c76f0a5 /apt-pkg/solver3.cc | |
| parent | 83bad834c63604035c251f24ee9ea99dac1a1369 (diff) | |
solver3: Do not install new packages for Suggests
As a followup to the previous commit, restore the exact behavior
of the old solver to break the Suggests on upgrade here by erasing
any choices not previously installed.
This ensures that the Suggests never installs any new package, but
it will still retain previously installed packages when solver3 is
doing autoremove.
Diffstat (limited to 'apt-pkg/solver3.cc')
| -rw-r--r-- | apt-pkg/solver3.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc index 66e307133..620156ac3 100644 --- a/apt-pkg/solver3.cc +++ b/apt-pkg/solver3.cc @@ -862,6 +862,11 @@ APT::Solver::Clause APT::Solver::TranslateOrGroup(pkgCache::DepIterator start, p if (unlikely(debug >= 3)) std::cerr << "Try to keep satisfied: " << clause.toString(cache, true) << std::endl; clause.group = Group::SatisfySuggests; + // Erase the non-installed solutions. We will process this last and try to keep the previously installed + // "best" solution installed. + clause.solutions.erase(std::remove_if(clause.solutions.begin(), clause.solutions.end(), [this](auto var) + { return var.CastPkg(cache)->CurrentVer == nullptr; }), + clause.solutions.end()); } else if (not important) { |
