<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/apt-pkg/solver3.cc, branch 2.9.27</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=2.9.27</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=2.9.27'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2025-01-30T14:36:10Z</updated>
<entry>
<title>solver3: Credit MiniSAT</title>
<updated>2025-01-30T14:36:10Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-01-30T14:34:51Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=945ead2ab03b7c83b3fbaecf3e1e543525e476f0'/>
<id>urn:sha1:945ead2ab03b7c83b3fbaecf3e1e543525e476f0</id>
<content type='text'>
Gbp-Dch: ignore
</content>
</entry>
<entry>
<title>solver3: Use a propagation queue</title>
<updated>2025-01-30T13:50:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-11-02T12:55:39Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=3523efb15d48ce3c6f9212f50dfc892497ba9dcb'/>
<id>urn:sha1:3523efb15d48ce3c6f9212f50dfc892497ba9dcb</id>
<content type='text'>
Instead of directly propagating in a recursive fashion,
queue propagations in a queue and work on them in a loop
per the miniSAT paper.

We call Propagate() only at the end of the FromDepCache()
function and then in the Solve loop. Delaying the initial
propagation means that we get a stronger reasoning:

Assume you have x-&gt;a-&gt;b-&gt;c, y-&gt;c and you install x,y:
- Previously we traversed: x, y, x-&gt;a, a-&gt;b, b-&gt;c, (y-&gt;c)
- but now we traverse:     x, y, x-&gt;a, y-&gt;c, a-&gt;b, (b-&gt;c)
Notably c now has the implication y-&gt;c instead of x-&gt;a-&gt;b-&gt;c.

Inside the solver we need to call Propagate in a loop:
Propagating facts can fail and we then backtrack. If backtracking
is succesful, we have gained a new fact to propagate.
</content>
</entry>
<entry>
<title>solver3: Replace Install() with Enqueue(), and PropagateInstall()</title>
<updated>2025-01-30T13:50:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-11-02T12:54:04Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=ccdbea353a30de597a00a88cf4c7216370a21882'/>
<id>urn:sha1:ccdbea353a30de597a00a88cf4c7216370a21882</id>
<content type='text'>
Do not enqueue common dependencies if a version is selected already,
this avoids test suites changing now in behavior as the ordering is
different.
</content>
</entry>
<entry>
<title>solver3: Remove NewUnsatRecommends group</title>
<updated>2025-01-30T13:50:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-01-30T12:46:09Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=45432cc57144715109f27d0bb83356b12e2a4ef5'/>
<id>urn:sha1:45432cc57144715109f27d0bb83356b12e2a4ef5</id>
<content type='text'>
This is more or less unused; but it particularly has the bad
problem of forcing new unsat recommends to be solved *before*
dependencies. Which is awkward.
</content>
</entry>
<entry>
<title>solver3: Soft unit propagation for optional items</title>
<updated>2025-01-30T13:50:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-01-30T12:04:47Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=a20242cf3a7321e78cfd4afd892d67255d8282ba'/>
<id>urn:sha1:a20242cf3a7321e78cfd4afd892d67255d8282ba</id>
<content type='text'>
If both items are optional, unit items should be processed
first.
</content>
</entry>
<entry>
<title>Drop usage of macro APT_OVERRIDE for simple override</title>
<updated>2025-01-05T22:16:08Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2024-12-26T19:41:53Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=f73593a4034d9eec0ec4466b8e173d4a4daece1f'/>
<id>urn:sha1:f73593a4034d9eec0ec4466b8e173d4a4daece1f</id>
<content type='text'>
We were rather inconsistent in using it and as our public headers
contain deduction guides (a c++17 feature) it seems silly to try to hide
a c++11 feature in a macro, so lets stop this charade and drop the
macro and while we are changing all these lines lets apply [[nodiscard]]
(another c++17 feature) and other suggestions from clang-tidy and
formatting for a little more consistency.
</content>
</entry>
<entry>
<title>solver3: Reject all non-candidates outright for strict pinning</title>
<updated>2024-12-03T08:44:18Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-11-02T11:45:07Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=8f317d97c9fb821e839342ae445c824207678eb7'/>
<id>urn:sha1:8f317d97c9fb821e839342ae445c824207678eb7</id>
<content type='text'>
Reimplement strict pinning by rejecting the non-candidates when
translating the problem from the depcache to the solver. This is
substantially better than restricting the list of alternatives for
an or group to only include allowed ones for debugging purposes,
albeit a bit slower.
</content>
</entry>
<entry>
<title>solver3: Add a missing debug level check</title>
<updated>2024-12-03T08:44:18Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-12-03T08:43:34Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=3e5977ed7b4e6291fcd67df193a501754ec1de7f'/>
<id>urn:sha1:3e5977ed7b4e6291fcd67df193a501754ec1de7f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>solver3: Fix intransitivity of version comparison on upgrade</title>
<updated>2024-12-02T10:37:16Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-12-02T09:25:44Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=63721d8271430c1a0996c08cc96a3a7e6f69dc52'/>
<id>urn:sha1:63721d8271430c1a0996c08cc96a3a7e6f69dc52</id>
<content type='text'>
We only compared candidate to installed version, but candidate
should dominate all versions, otherwise we end up in the fancy
problem of elpa-notmuch in
  upgrade-noble-t64-remove-desktop-2024-03-29.edsp

Where we had three versions:

    not-installable 0.38.3-1ubuntu1
    candidate 0.38.2-1.1ubuntu2
    installed 0.38.2-1ubuntu2

And received an ordering:

    installed &gt; non-installable &gt; candidate

despite

    candidate &gt; installed

This is only visible with no-strict-pinning right now, as we are
otherwise filtering out invalid choices (and hence we only have
candidate and installed otherwise).
</content>
</entry>
<entry>
<title>solver3: Refactor Install(Ver) to PropagateInstall(Ver)</title>
<updated>2024-11-02T12:17:11Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-11-02T12:13:51Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=9f40a9a3251cc6b51bc50a5fe12c49a45a51aedd'/>
<id>urn:sha1:9f40a9a3251cc6b51bc50a5fe12c49a45a51aedd</id>
<content type='text'>
This is the first part of changing from Install() to Enqueue() for
installs, affecting only the versions. For packages, we still have
to resolve the group changing: When propagating cleanly, we don't
have the information as to which group the package was part of,
hence we are no longer able to queue the version selection of
upgrades before obsolete packages, for example, which needs
solving.
</content>
</entry>
</feed>
