vcswatch reports that
this package seems to have new commits in its VCS but has
not yet updated debian/changelog. You should consider updating
the Debian changelog and uploading this new version into the archive.
Here are the relevant commit logs:
commit c4cb1e76999247867fc04bdbfa71c8c2c6b26ad1
Merge: adb67fa7 3f8162ea
Author: Julian Andres Klode <jak@debian.org>
Date: Wed May 28 12:34:11 2025 +0000
Merge branch 'solver3' into 'main'
solver3: Only merge dependencies on the same package
See merge request apt-team/apt!486
commit 3f8162ea008b8a3330a1113a94bc654f05000660
Author: Julian Andres Klode <jak@debian.org>
Date: Wed May 28 13:57:17 2025 +0200
solver3: Only merge dependencies on the same package
Avoid or groups and dependencies on different (virtual) packages,
to avoid some common pitfalls like the added xorg test case.
commit adb67fa7abf9eb30d312fdd3284f9d86a2899cb2
Merge: 88adaff1 86c44166
Author: Julian Andres Klode <jak@debian.org>
Date: Tue May 27 17:07:42 2025 +0000
Merge branch 'solver3' into 'main'
solver3: Merge intersecting dependencies
See merge request apt-team/apt!485
commit 86c44166b470ecee5a192ffb434fb7931b7c0afd
Author: Julian Andres Klode <jak@debian.org>
Date: Tue May 27 14:24:09 2025 +0200
solver3: Merge Depends into Recommends
Merge any hard clauses into optional clauses, such that
optional clauses don't end up with more choices.
For example if you have
Depends: a | b
Recommends: a | c
This becomes:
Depends: a | b
Recommends: a
We have simulated this with the chaos-actor in the test case
and a
Depends: git (not satisfied by chaos provider)
Recommends: git (satisfied by chaos provider)
and the latter constraint is limited to the former.
commit eafc52e942d4daec30fb80e70c035ed935f31afb
Author: Julian Andres Klode <jak@debian.org>
Date: Tue May 27 14:24:09 2025 +0200
solver3: Merge intersecting dependencies
If a package declares multiple dependencies that can be solved by
the same packages we should use the common set of packages to
solve them.
A common example is requiring the same Debian source version, or the
same upstream version as in our test case:
git-ng Depends: git (>> 1:2.26.2), git (<< 1:2.26.2-.)
The solver expands this to the concrete objects:
git-ng Depends: "real git" (= 1:2.26.2-1) | chaos-actor, "real git" (= 1:2.26.2-1) | "real git" (= 1:2.25.1-1)
When given an upgrade request, the solver would now choose
chaos-actor to satisfy git (>> 1:2.26.2)
"real git" (= 1:2.25.1-1) to satisfy git (<< 1:2.26.2-.)
To satisfy the two constraints, which is not the intended outcome.
Address this problem by introducing a concept of merged clauses:
If two dependencies of a package have overlapping solutions, replace
the dependency by the intersection, and record the merged clause
instead, this leads to a single clause:
Depends: git (>> 1:2.26.2) and git (<< 1:2.26.2-.)
which expands to just the real git binary.
The implementation is a bit finicky in that it removes the variables
from the original clause which may not be helpful for debugging, but
it records the clauses merged with, as seen in the test case, so the
reasoning is clear.
LP: #2111792
commit 88adaff17023b0c916fc3227dc25d0b95128d7f0
Merge: c6f49402 717ca792
Author: Julian Andres Klode <jak@debian.org>
Date: Mon May 26 15:06:54 2025 +0000
Merge branch 'solver3' into 'main'
solver3: Remove Work::choice
See merge request apt-team/apt!484
commit 717ca7922be8a025b8034dc840b2ad9befc3b171
Author: Julian Andres Klode <jak@debian.org>
Date: Mon May 26 11:19:11 2025 +0200
solver3: Assume manual packages
If we have allowed the removal of manual packages, assume them
all before starting the solver. This should ensure that as long
as there is a solution that does not remove a manually installed
package, it is found.
This requires a sweeping set of changes in the test suite, but
ensures that we get "safe" behavior from the solver. We have
in particular seen that without asserting the installed packages,
several people ended up with ubuntu-minimal and perl removed in
a situation where that was not warranted, that is, they install
winehq, and then pull in some new perl packages in a newer version
than the installed one, and the solver chose to create a mismatched
version set, which then caused the main perl package to not be
installable.
Oops: 1b55173a-3526-11f0-b7ac-fa163e171f02
Oops: dbd5149e-36b9-11f0-bb74-fa163ec44ecd
commit 6c3196950acb6a1351c221c74edd9c3ba691b7e5
Author: Julian Andres Klode <jak@debian.org>
Date: Mon May 26 12:42:58 2025 +0200
solver3: Initialize startTime if not set in Pop()
If the user pushes Assumptions that fail, we could inadvertently
timeout during the Pop() as the variable was not initialized.
Always initialize it to 0, and if we haven't set an actual time
by the time we Pop() set it there.
commit 9d0f306b3e1b4a485b6fb31e90ae849d2a46c636
Author: Julian Andres Klode <jak@debian.org>
Date: Sun May 25 19:39:45 2025 +0200
solver3: Allow CompareProviders3 with empty package
This can be used to compare arbitrary packages in non-dependency
contexts. It remains to be seen whether this is a meaningful
approach.
commit b3acf5ffb28b26f7766cf4eac9b9553a3f118bff
Author: Julian Andres Klode <jak@debian.org>
Date: Sun May 25 13:48:14 2025 +0200
solver3: If no choice was made nothing to invert
We sometimes enqueue no choice as the choice, specifically when
an optional clause became unsat as we need to reenqueue it on
undo.
But of course, this breaks undoing stuff because now it tries to
insert !root and then solver breaks.
commit 822c979d5e010e24e513875b608d1f68daaeced4
Author: Julian Andres Klode <jak@debian.org>
Date: Sun May 25 12:25:21 2025 +0200
solver3: Handle failed assumption in Pop()
If an Assume() failed, we will have pushed the choices stack,
but not actually pushed anything to the solved stack.
This would cause a segmentation fault trying to read the referenced
entry that doesn't actually exists, namely solved[solved.size()].
Handle this by exiting early as there's nothing to do except
pop the entry back out of the array.
commit 4f5b0fe1d6af3a5cce15636b9c5307438a9c2d9f
Author: Julian Andres Klode <jak@debian.org>
Date: Tue May 20 11:42:34 2025 +0200
solver3: Remove Work::choice
Instead of having the historic choice here, follow MiniSAT and
use the assigned variable from the tail. This should also make
the Assume() function work now, albeit we still need to actually
migrate to it.
This is a first step towards refactoring the Solve() loop to use
a propagate/find next literal/assume it kind of loop, albeit there
is a bit more to prepare there as we need to also reinsert work
items when backtracking.
commit c6f49402c2f8aed20b538263d80ecb6fed179b18
Merge: 5bfea97d 115b7257
Author: Julian Andres Klode <jak@debian.org>
Date: Sun May 25 09:59:08 2025 +0000
Merge branch 'cxx23' into 'main'
Bump CMAKE_CXX_STANDARD to 23 and fix code
See merge request apt-team/apt!482
commit 115b7257d9f29bd17b97b1cda727a67e29021f8c
Author: Julian Andres Klode <jak@debian.org>
Date: Sun May 25 11:15:08 2025 +0200
Bump CMAKE_CXX_STANDARD to 23 and fix code
ftparchive/contents.h failed with operator< defined only,
so define operator<=> instead.
The operator and FileCopyType constructor both had a warning
about not throwing and adding a noexcept, so add one