From aaa9e415ce48964726401462767d6038da6d82e7 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 21 May 2024 16:57:56 +0200 Subject: solver3: Actually restore unsolved items rather than solved ones When restoring previously solved items, we try to restore items that have become unsolved again by skipping items that have a solved solution. Well at least we thought we did, but we accidentally had a "not" in there that inverted the meaning, hence we lost work items on backtracking. This mostly did not seem to have caused any issues, I stumbled over it while trying to add `autoremove` listings to `upgrade`, but fixing it also fixes: test-ubuntu-bug-1130419-prefer-installed-ma-same-siblings This used to say "E: Broken packages", meaning the solver lost a non-optional install request and the 2nd stage solver caught an incomplete solution. Also test-bug-735967-lib32-to-i386-unavailable restores the legacy solver behavior, so win win? --- apt-pkg/solver3.cc | 2 +- test/integration/solver3.broken | 1 - test/integration/test-bug-735967-lib32-to-i386-unavailable | 8 +------- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc index e16a02684..d5811423d 100644 --- a/apt-pkg/solver3.cc +++ b/apt-pkg/solver3.cc @@ -710,7 +710,7 @@ bool APT::Solver::Pop() if (w.depth > depth) // Deeper decision level is no longer valid. return true; // This item is still solved, keep it on the solved list. - if (not std::any_of(w.solutions.begin(), w.solutions.end(), [this](auto ver) + if (std::any_of(w.solutions.begin(), w.solutions.end(), [this](auto ver) { return (*this)[ver].decision == Decision::MUST; })) return false; // We are not longer solved, move it back to work. diff --git a/test/integration/solver3.broken b/test/integration/solver3.broken index c098b7498..6575b068d 100644 --- a/test/integration/solver3.broken +++ b/test/integration/solver3.broken @@ -27,7 +27,6 @@ test-phased-updates-upgrade test-prevent-markinstall-multiarch-same-versionscrew test-release-candidate-switching test-resolve-by-keep-new-recommends -test-ubuntu-bug-1130419-prefer-installed-ma-same-siblings test-ubuntu-bug-1304403-obsolete-priority-standard test-ubuntu-bug-1990586 test-ubuntu-bug-2025462-phased-dist-upgrade diff --git a/test/integration/test-bug-735967-lib32-to-i386-unavailable b/test/integration/test-bug-735967-lib32-to-i386-unavailable index a44e58570..cc925d161 100755 --- a/test/integration/test-bug-735967-lib32-to-i386-unavailable +++ b/test/integration/test-bug-735967-lib32-to-i386-unavailable @@ -32,12 +32,6 @@ setupaptarchive --no-update configarchitecture 'amd64' testsuccess aptget update -testsuccessequal 'Reading package lists... -Building dependency tree... -Calculating upgrade... -The following packages have been kept back: - lib32nss-mdns libnss-mdns -0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -s --solver 3.0 testsuccessequal 'Reading package lists... Building dependency tree... Calculating upgrade... @@ -48,7 +42,7 @@ The following packages will be upgraded: 1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. Remv lib32nss-mdns [0.9-1] Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64]) -Conf libnss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s --solver internal +Conf libnss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s testfailuremsg 'E: Unsatisfiable dependency group libfoo:amd64=1 -> libfoo-bin:amd64' aptget install foo -s --solver 3.0 testfailureequal 'Reading package lists... -- cgit v1.2.3-70-g09d2