From 539a3dfcfdf30e552a6374ee478a98e16ab7fa7d Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 22 Jul 2025 20:34:34 +0200 Subject: solver3: Allow any downloadable version to mark a package as not obsolete Lots of people have pinned an older version that is no longer installable, or more common yesterday, we saw a lot of people who seemingly manually installed a newer version of a deb than in the repositories, causing the package to be considered obsolete, which does not make much sense. Oops: 4c39d922-410f-11f0-bbf9-fa163ec44ecd Oops: a64054f6-4140-11f0-bbfd-fa163ec44ecd Oops: a32196c1-661d-11f0-a97c-fa163ec8ca8c --- apt-pkg/solver3.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc index 2c381f098..a386b967c 100644 --- a/apt-pkg/solver3.cc +++ b/apt-pkg/solver3.cc @@ -542,11 +542,16 @@ bool APT::Solver::Obsolete(pkgCache::PkgIterator pkg, bool AllowManual) const if (ObsoletedByNewerSourceVersion(ver)) return true; - if (ver.Downloadable()) + // Any version downloadable is good enough for us tbh + for (auto ver = pkg.VersionList(); not ver.end(); ++ver) { - pkgObsolete[pkg] = 1; - return false; + if (ver.Downloadable()) + { + pkgObsolete[pkg] = 1; + return false; + } } + if (debug >= 3) std::cerr << "Obsolete: " << ver.ParentPkg().FullName() << "=" << ver.VerStr() << " - not installable\n"; pkgObsolete[pkg] = 2; -- cgit v1.2.3-70-g09d2