<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/test, branch 3.1.15</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=3.1.15</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=3.1.15'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2026-01-31T16:30:20Z</updated>
<entry>
<title>solver3: Use classical watchers for propagation</title>
<updated>2026-01-31T16:30:20Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-12-29T17:47:15Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=1fbb857b6b2cbddcea9e8b03aa0c766c72e91f34'/>
<id>urn:sha1:1fbb857b6b2cbddcea9e8b03aa0c766c72e91f34</id>
<content type='text'>
Instead of tracking dependencies and reverse dependencies,
install classical watchers. This vastly streamlines the
propagation code and allows us to easily switch to literals
in the next step.

This implementation watches _all_ solutions rather than using
the modern 2-watched literals scheme or the intermediate
head/tail watchers.

Ultimately a more effective watcher scheme would be interesting
but not a significant priority seeing as most of the solver runtime
is spent not in propagation but in problem translation.

decision trees
--------------
The new watchers produce slightly different decision trees, sometimes
subtly changing solutions. Notably in various observed examples in
Ubuntu 25.04, courier was installed as an MTA instead of postfix:

The old decision tree was:

    apcupsd:amd64 -&gt; mailutils:amd64=1:3.18-1 -&gt; mailutils:amd64 -&gt; postfix:amd64=3.9.1-10ubuntu1

The new decision tree is:

    lsb:amd64 -&gt; lsb-core:amd64 -&gt; courier-mta:amd64=1.3.13-1

The difference here being that lsb-core declares a mail-transport-agent
dependency whereas mailutils depends on `default-mta | mail-transport-agency`;
but both are effectively subject to selection at similar time.

Further work is needed to optimize selection. A notable choice may also
be to deal with broken packages like lsb-core that declare dependencies
solely on a virtual package by reconstructing the default provider for
that package utilizing default-* dependencies or similar notions.

Likewise in the test suite, explanations are different in some
uninstallable cases.

backtracking
~~~~~~~~~~~~
The following major changes were observed in the 25.04 test suite:

-tmp/regression-remove/07f0a068-36c2-11f0-b7c1-fa163e171f02:18
+tmp/regression-remove/07f0a068-36c2-11f0-b7c1-fa163e171f02:3

-tmp/regression-remove/32078f70-3734-11f0-a75a-fa163ec8ca8c:64
+tmp/regression-remove/32078f70-3734-11f0-a75a-fa163ec8ca8c:19

Other test cases showed little deviation, +/- 1, generally
the same amount of backtracking.

performance
~~~~~~~~~~~
Running Ubuntu's regression test suite resulted in no significant
performance difference being observable.

Before: 290s user time; 16.66% solver
After:  299s user time; 17.36% solver

Tests where run with make -j 8 and solver performance extracted

    perf report --symbol-filter=ResolveExternal --stdio
</content>
</entry>
<entry>
<title>variants: Do not report unsupported variants in repositories</title>
<updated>2026-01-23T11:04:31Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-01-23T11:03:04Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=49e80c2d9061372e0ec697be43bcba4c451b7752'/>
<id>urn:sha1:49e80c2d9061372e0ec697be43bcba4c451b7752</id>
<content type='text'>
We configure all variants the CPU supports as active, but repositories
usually do not provide all of them, so let's not be noisy.
</content>
</entry>
<entry>
<title>why: Render info about all providers on virtual packages</title>
<updated>2026-01-20T13:07:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-01-20T13:04:20Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=34876ed2e5cdf504e2a4f9721486d279ae5f3be6'/>
<id>urn:sha1:34876ed2e5cdf504e2a4f9721486d279ae5f3be6</id>
<content type='text'>
Refactor code into a doOne helper lambda, and then add loop
over the providers to use it.

This fixes a crash seen by Benjamin in a nice way than just
failing :)

Reported-by: Benjamin Drung
</content>
</entry>
<entry>
<title>solver3: Rename decision to assignment</title>
<updated>2026-01-05T21:20:24Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-12-28T15:56:28Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=21d099878ed8c34f3b13747bcec380e0402e57a3'/>
<id>urn:sha1:21d099878ed8c34f3b13747bcec380e0402e57a3</id>
<content type='text'>
The previous use of decision here conflicted with the use
of decision level and the general notion of having made a
decision, because the assignment might have been propagated
as a matter of fact.
</content>
</entry>
<entry>
<title>Correctly copy provided version in m-a lazy-init</title>
<updated>2025-11-10T10:01:02Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-11-10T09:41:20Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=2f4299bf39c85b694876cb8030fae0887e8b5edc'/>
<id>urn:sha1:2f4299bf39c85b694876cb8030fae0887e8b5edc</id>
<content type='text'>
When a provides was copied, we inadvertently copied the package
version instead of the provided version. Copy the provided version
instead.

Closes: #1120463
</content>
</entry>
<entry>
<title>Revert "depcache: Allow changing multi-arch versions for removed siblings"</title>
<updated>2025-10-26T08:31:20Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-10-26T08:14:20Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=22786e32b613518ae3a5cd07e9e2f1419b2c6552'/>
<id>urn:sha1:22786e32b613518ae3a5cd07e9e2f1419b2c6552</id>
<content type='text'>
This reverts commit 74636b64a7ee56637a3ce4ddc1d060ca9f8b77e1.

Adjust the test case accordingly, as it is no longer possible to
install libgcc-s1:s390x. We need to sort this out in the ToDepCache
translation layer at a later time.

Sadly the depcache rejects valid solutions like this; solving this
isn't trivial. Technically we need to split up the FromUser and
auto-bit handling to solve this, but even then, MarkDelete() with
FromUser=0 moves the auto-bit on metapackages; this doesn't happen
when doing FromUser=1, so we can't always do FromUser=1.

Fixes: a3fca052ca21ad222ac7f2fdd7f3fe84b44beb60
</content>
</entry>
<entry>
<title>test: Correctly skip tests when not using -j</title>
<updated>2025-10-26T07:28:35Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-10-26T06:59:52Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=487ce0983c2008991566b4cfb269fd7d29a08e98'/>
<id>urn:sha1:487ce0983c2008991566b4cfb269fd7d29a08e98</id>
<content type='text'>
We never implemented comment support in the skip test file for
-j as we only run with -j, but the debian/tests/run-tests runs
without parallelism.
</content>
</entry>
<entry>
<title>tests: Do not skip tests for --solver internal</title>
<updated>2025-10-26T07:28:35Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-10-26T06:58:43Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=78da58ec0c1cdbda6cdd22c63f85ddac703bb0d6'/>
<id>urn:sha1:78da58ec0c1cdbda6cdd22c63f85ddac703bb0d6</id>
<content type='text'>
Remove the exports for the default as we don't want those
inherited, they can just be reset. Set the skip file to
/dev/null when a solver is selected, to make sure that
tests don't fall back to the default skip file.
</content>
</entry>
<entry>
<title>Adjust test cases to treat 3.0 as default APT_SOLVER if not set</title>
<updated>2025-10-26T07:28:08Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-10-26T07:24:39Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=5e8e69cdd6b512480f3208298725e1e44c80f06e'/>
<id>urn:sha1:5e8e69cdd6b512480f3208298725e1e44c80f06e</id>
<content type='text'>
Not needed so far because we export a default 3.0 APT_SOLVER, but
quite useful if we stop doing so (next commit).
</content>
</entry>
<entry>
<title>solver3: Allow removing manually installed packages</title>
<updated>2025-10-25T20:16:54Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-10-25T19:31:34Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=a3fca052ca21ad222ac7f2fdd7f3fe84b44beb60'/>
<id>urn:sha1:a3fca052ca21ad222ac7f2fdd7f3fe84b44beb60</id>
<content type='text'>
</content>
</entry>
</feed>
