<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/test/integration/test-solver3-evaluation, branch 3.1.11</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=3.1.11</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=3.1.11'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2025-04-04T13:28:40Z</updated>
<entry>
<title>solver3: Consider more upgrades more costly when not upgrading</title>
<updated>2025-04-04T13:28:40Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-04-04T13:25:01Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=295ab44a3063fb7790d8a558a161fc1bd801f998'/>
<id>urn:sha1:295ab44a3063fb7790d8a558a161fc1bd801f998</id>
<content type='text'>
We inadvertently considered more upgrades as a better solution in
all cases, but if we are *installing* rather than upgrading, we
should count upgrades as a negative.

Change the code to accomodate that. This requires a few more
tricks:

- We remove the keep count check. This does not appear to work
  correctly and would have prevented the fix. We are already
  counting all possible changes, so why bother.

- We need to subtract the upgrade count from the install count
  (upgrades are a class of installs) since we now allow comparing
  solutions with different upgrade counts for install counts.

- After comparing the "new install count", we now compare upgrade
  count too, in the opposite direction of upgrading.

To test, we abuse that solver 3.0 does not upgrade all packages
in a source package when using the install command.

LP: #2105395
</content>
</entry>
<entry>
<title>solver3: Correctly deb822-escape error message in evaluation report</title>
<updated>2025-03-26T15:47:37Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-03-26T15:44:06Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=6e5d8929c06cb645e639022477a14ca65d483e32'/>
<id>urn:sha1:6e5d8929c06cb645e639022477a14ca65d483e32</id>
<content type='text'>
The error messages are multi-line now, so need correct escaping.

LP: #2104276
</content>
</entry>
<entry>
<title>solver3: Avoid empty error message in evaluation crash report</title>
<updated>2025-03-20T14:18:05Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-03-20T14:16:58Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=61b3b1840568b223baad08da1eb9a1fb5d6e7f91'/>
<id>urn:sha1:61b3b1840568b223baad08da1eb9a1fb5d6e7f91</id>
<content type='text'>
whoopsie does not accept empty values
</content>
</entry>
<entry>
<title>solver3: Use zstd-compressed, base64-encoded dumps</title>
<updated>2025-03-20T14:09:56Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-03-20T14:03:23Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=a2cb87afcbc89d1f8e770c26121a75d9c1654458'/>
<id>urn:sha1:a2cb87afcbc89d1f8e770c26121a75d9c1654458</id>
<content type='text'>
Store the solver dumps with zstd compression and base64-encode
them in the crash report; such that they take up significantly
less space and can fit in cassandra's schema.

Base64 is wrapped at 76 characters as the base64 tool does. Do
some magic std::string_view conversion to avoid string copies
for the substr() used to get 76 characters at a time.

Note we can rely on substr(i, 76) to handle less than 76 characters
just fine; it uses std::min(76, size() - i) characters.
</content>
</entry>
<entry>
<title>solver evaluation: write minimized solver dumps</title>
<updated>2025-03-20T09:26:51Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-03-13T14:20:49Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=c741e4f3bc7143031f70b5a353aafc004d26c220'/>
<id>urn:sha1:c741e4f3bc7143031f70b5a353aafc004d26c220</id>
<content type='text'>
These are faster to generate and significantly smaller.
</content>
</entry>
<entry>
<title>Print --solver 3.0 explanation if both internal and it failed</title>
<updated>2025-03-09T12:55:23Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-03-09T12:55:23Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=6c112f9860c1730237029f4e23d40bf658d73704'/>
<id>urn:sha1:6c112f9860c1730237029f4e23d40bf658d73704</id>
<content type='text'>
This can provide useful additional context.

To avoid updating the whole test suite for it, introduce a new
option `quiet::NoSolver3Explanation` and set it by default. All
the other tests that assert output will already have matching
tests for --solver 3.0 with the correct messages asserted, it
makes no sense to duplicate them.
</content>
</entry>
<entry>
<title>Evaluate and fall back to the 3.0 solver</title>
<updated>2025-03-09T12:33:53Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2025-02-18T12:06:32Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=935a9ab334e55a29363f45e7de6338c47337e806'/>
<id>urn:sha1:935a9ab334e55a29363f45e7de6338c47337e806</id>
<content type='text'>
Always run the 3.0 solver after the internal solver. If the internal
solver failed, and the 3.0 solver did not, use the 3.0 result.

If 3.0 solver failed or produced a worse result than the internal
solver, write an apport crash dump.

We exclude situations which we now the solver can't handle, i.e.
removals are forbidden and you requested removals, and stuff like
that.
</content>
</entry>
</feed>
