<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/apt-pkg/solver3.h, branch 2.9.14</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=2.9.14</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=2.9.14'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2024-11-02T12:17:11Z</updated>
<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>
<entry>
<title>solver3: Rename the 'dirty' bit to 'erased'</title>
<updated>2024-11-02T09:23:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-08-01T08:08:42Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=9d99322c14c44d73722bd580473abf67538b7c05'/>
<id>urn:sha1:9d99322c14c44d73722bd580473abf67538b7c05</id>
<content type='text'>
This captures the meaning better
</content>
</entry>
<entry>
<title>solver3: Remove the Reject() function, propagate in Enqueue() instead</title>
<updated>2024-11-02T09:23:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-08-01T07:57:28Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=cab40edc4040691fcadbddbdee77decf4bf20573'/>
<id>urn:sha1:cab40edc4040691fcadbddbdee77decf4bf20573</id>
<content type='text'>
Long term we should have a propagate queue, this is the minimal change
to keep the behavior identical, a first step on the road.
</content>
</entry>
<entry>
<title>solver3: Introduce new Assume() and Enqueue() helpers and use them</title>
<updated>2024-11-02T09:23:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-08-01T06:51:37Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=c1f69a64fd5070723ef425cc1255cde2a28966ad'/>
<id>urn:sha1:c1f69a64fd5070723ef425cc1255cde2a28966ad</id>
<content type='text'>
These are taken roughly from the MiniSAT paper. We still have a bit
to go in actually encoding all clauses so the reasons are still
variables, and Assume() isn't fully working yet.

Adjust the existing Install()/Reject() code to use these functions,
we already see additional lines in the log that we failed to log
before, and this ensures more consistency.

This is sort of still the wrong direction: Install()/Reject() do the
propagation too; but that is tbd.
</content>
</entry>
<entry>
<title>solver3: Rename Reason to Var</title>
<updated>2024-11-02T09:23:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-08-01T05:25:25Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=a5a7b6905dc021d9773229e47ec60367e3e606d8'/>
<id>urn:sha1:a5a7b6905dc021d9773229e47ec60367e3e606d8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>solver3: Track all assignments and undo them individually</title>
<updated>2024-11-02T09:23:15Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-08-01T03:43:09Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=761fc96fe6158d46f11137c14822545ac0b0fe91'/>
<id>urn:sha1:761fc96fe6158d46f11137c14822545ac0b0fe91</id>
<content type='text'>
Adopt MiniSAT's strategy for dealing with assignments and choices,
having a single step undoOne() function to undo one and record them
all on the queue; this should likely speed up backtracking since we
no longer need to rescan everything.
</content>
</entry>
<entry>
<title>Fix obsoleted-by handling for experimental</title>
<updated>2024-08-12T14:05:54Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-08-12T13:27:31Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=5d2c0e600656db690aaeb0768f3df8e71127808a'/>
<id>urn:sha1:5d2c0e600656db690aaeb0768f3df8e71127808a</id>
<content type='text'>
Basically this boils down to checking that the priority of the
source candidate candidate is higher or equal than the priority
of the package's candidate that is being under consideration.

It stands to reason if we maybe we should actually calculate a
source candidate version; this will look similar but may perhaps
perform slightly different.
</content>
</entry>
<entry>
<title>solver3: Refactor Reason.Pkg()/Reason.Ver() use with iterator</title>
<updated>2024-07-16T11:55:07Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-07-16T11:54:11Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=62573e3ca6b45b0d12b9be8b02da116ce0d91b75'/>
<id>urn:sha1:62573e3ca6b45b0d12b9be8b02da116ce0d91b75</id>
<content type='text'>
More code but nicer to read
</content>
</entry>
<entry>
<title>solver3: Consider packages as obsolete and not versions</title>
<updated>2024-07-02T18:08:38Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-07-02T16:51:11Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=8c13d9cb1c38ebb52cf6e1c8c7561c5c5d87c970'/>
<id>urn:sha1:8c13d9cb1c38ebb52cf6e1c8c7561c5c5d87c970</id>
<content type='text'>
This makes more sense, as all package versions are obsolete that
are not the candidate, usually.

Pay special attention to no-strict-pinning: If we don't have
strict pinning, a package without a candidate version may still
be non-obsolete if the latest version is not obsolete.

Likewise, in no-strict-pinning any later source version that exists
will cause the package to be considered obsolete, rather than just
candidates.
</content>
</entry>
<entry>
<title>solver3: Order obsolete choices last</title>
<updated>2024-06-13T13:10:06Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>julian.klode@canonical.com</email>
</author>
<published>2024-06-06T09:19:04Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=6708203296911800caf94bb94ce204d3a39af0bd'/>
<id>urn:sha1:6708203296911800caf94bb94ce204d3a39af0bd</id>
<content type='text'>
This has two aspects:

1. For a dependency A | B | C we order the obsolete packages last,
   that is, if A is obsolete, this gets reordered to B | C | A,
   such that we try to pick non-obsolete packages first to ease
   upgrade calculation.

2. When comparing two dependencies, we order dependencies into three
   groups: First we satisfy dependencies mentioning only non-installed
   (NEW) packages, then we satisfy "normal" dependencies, and finally
   we satisfy any dependencies mentioning obsolete packages.

   This means for example if you have obsolete libfoo1 and a new
   libfoo1t64, that we will see Depends: libfoo1t64 before any
   Depends: libfoo1 (which may expand to libfoo1 | libfoo1t64),
   so we effectively will have selected "replacement" packages
   this way already before getting to older packages where we
   would have to choose between the obsolete package and its
   replacement.
</content>
</entry>
</feed>
