summaryrefslogtreecommitdiff
path: root/apt-pkg/solver3.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2024-07-02 18:53:33 +0200
committerJulian Andres Klode <julian.klode@canonical.com>2024-07-02 20:10:33 +0200
commitae141932d8b434098e3f77c75c428ca8caff9a6e (patch)
tree0d2953dd633c8df6581fff317444f2d8684f55d6 /apt-pkg/solver3.cc
parent8c13d9cb1c38ebb52cf6e1c8c7561c5c5d87c970 (diff)
solver3: Only demote obsolete packages in choices for upgrades
If we are not upgraded, we should continue to keep the installed package installed if possible.
Diffstat (limited to 'apt-pkg/solver3.cc')
-rw-r--r--apt-pkg/solver3.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc
index 29bd3a115..54f66ccd2 100644
--- a/apt-pkg/solver3.cc
+++ b/apt-pkg/solver3.cc
@@ -64,8 +64,9 @@ struct APT::Solver::CompareProviders3 /*{{{*/
// Try obsolete choices only after exhausting non-obsolete choices such that we install
// packages replacing them and don't keep back upgrades depending on the replacement to
// keep the obsolete package installed.
- if (auto obsoleteA = Solver.Obsolete(A), obsoleteB = Solver.Obsolete(B); obsoleteA != obsoleteB)
- return obsoleteB;
+ if (upgrade)
+ if (auto obsoleteA = Solver.Obsolete(A), obsoleteB = Solver.Obsolete(B); obsoleteA != obsoleteB)
+ return obsoleteB;
// Prefer MA:same packages if other architectures for it are installed
if ((AV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same ||
(BV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)