<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/apt-pkg/depcache.cc, branch 2.1.6</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=2.1.6</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=2.1.6'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2020-06-03T11:41:14Z</updated>
<entry>
<title>Deal with duplicates in the solution space of a dep</title>
<updated>2020-06-03T11:41:14Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-06-03T11:03:37Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=96359a576f59eb8bc461bdd4c5eadeb17fe8f0ca'/>
<id>urn:sha1:96359a576f59eb8bc461bdd4c5eadeb17fe8f0ca</id>
<content type='text'>
While we process the possible solutions we might modify other solutions
like discarding their candidates and such, so that then we reach them
they might no longer be proper candidates. We also try to drop
duplicates early on to avoid the simple cases of these which
test-explore-or-groups-in-markinstall triggers via its explicit
duplication but could also come via multiple provides.

It only worked previously as were ignoring current versions which
usually is okay expect if they are marked for removal and we want to
reinstate them so the ProblemResolver can decide which one later on.
</content>
</entry>
<entry>
<title>Don't update candidate provides map if the same as current</title>
<updated>2020-05-25T10:05:00Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-23T15:15:32Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=c77566fd8f21a1a44efb4092c90996d1cc8eaf24'/>
<id>urn:sha1:c77566fd8f21a1a44efb4092c90996d1cc8eaf24</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Don't set variables to conditionally override them 2 lines later</title>
<updated>2020-05-25T10:05:00Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-23T14:55:59Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=0e5a9bf95d5b9b3c775ed3ce6142d35815a7c7ac'/>
<id>urn:sha1:0e5a9bf95d5b9b3c775ed3ce6142d35815a7c7ac</id>
<content type='text'>
Gbp-Dch: Ignore
</content>
</entry>
<entry>
<title>Allow pkgDepCache to be asked to check internal consistency</title>
<updated>2020-05-24T19:02:35Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-23T14:22:44Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=2ba86f95bfad4ec00a3b99b311d05c158162b25c'/>
<id>urn:sha1:2ba86f95bfad4ec00a3b99b311d05c158162b25c</id>
<content type='text'>
For speed reasons pkgDepCache initializes its state once and then has a
battery of update calls you have to invoke in the right order to update
the various states – all in the name of speed. In debug and/or
simulation mode we can sacrifice this speed for a bit of extra checking
though to verify that we haven't made some critical mistake like #961266.
</content>
</entry>
<entry>
<title>Keep status number if candidate is discarded for kept back display</title>
<updated>2020-05-23T15:59:19Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-23T13:53:06Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=4f71dc657c34915508a9e34b000e1b577931655a'/>
<id>urn:sha1:4f71dc657c34915508a9e34b000e1b577931655a</id>
<content type='text'>
It looks like hack and therefore I wanted this to be a very isolated
commit so we can find it &amp; revert it easily if need be, but for now it
seems to work.

The idea is that Status is telling us how the candidate is in relation
to the current installed version which is used to figure out if a
package is "kept back" by the algorithm or not, but by discarding the
candidate version we loose this information.

Ideally we would keep better tabs on what we do to a package and why,
but for now that seems okayish. It will cause the wrong version to be
displayed though as if the package is installed the installed version
becomes the candidate and hence (installed =&gt; installed) is displayed.
</content>
</entry>
<entry>
<title>Known-bad candidate versions are not an upgrade option</title>
<updated>2020-05-23T15:58:42Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-22T17:52:26Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=4d87856b94dae1a40a1a8147a6dbcfe714cd05c7'/>
<id>urn:sha1:4d87856b94dae1a40a1a8147a6dbcfe714cd05c7</id>
<content type='text'>
If we have a negative dependency to deal with we prefer to install an
upgrade rather than remove the current version. That is why we split the
method rather explicitly in two in 57df273 but there is a case we didn't
react to: If we have seen the candidate before as a "satisfier" of this
negative dependency there is no point in trying to upgrade to it later
on. We keep that info by candidate discard if we can, but even if we
can't we can at least keep that info around locally.

This "fixes" (or would hide) the problem described in 04a020d as well as
you don't have to discard installations you never make.
</content>
</entry>
<entry>
<title>Reset candidate version explicitly for internal state-keeping</title>
<updated>2020-05-23T15:58:42Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-22T16:56:40Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=04a020d7a217d6b5af86c048c2974760053b8079'/>
<id>urn:sha1:04a020d7a217d6b5af86c048c2974760053b8079</id>
<content type='text'>
For a (partially) installed package like the one MarkInstall operates on
at the moment we want to discard the candidate from, we have to first
remove the package from the internal state keeping to have proper broken
counts and such and only then reset the candidate version which is a
trivial operation in comparison.

Take a look at the testcase: Now, what is the problem? Correct,
git:i386. Didn't see that coming, right? It is M-A:foreign so apt tries
to switch the architecture of git here (which is pointless, it knows
that this won't work, but lets fix that in another commit) will
eventually realize that it can't install it and wants to discard the
candidate of git:i386 first removing the broken indication like it
should, removing the install flag and then reapplies the broken
indication: Expect it doesn't as it wants to do that over the candidate
version which the package no longer had so seemingly nothing is broken.

It is a bit of a hairball to figure out which commit it is exactly that
is wrong here as they are all influencing each other a bit, but &gt;= 2.1
is an acceptable ballpark. Bisect says 57df273 but that is mostly a lie.

Closes: #961266
</content>
</entry>
<entry>
<title>Propagate protected to already satisfied dependencies</title>
<updated>2020-05-18T13:55:36Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-16T12:46:05Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=dbed89f296106f82e9fe8f866fa87a4c14b44584'/>
<id>urn:sha1:dbed89f296106f82e9fe8f866fa87a4c14b44584</id>
<content type='text'>
The previous commit deals with negative, now we add the positive side of
things as well which makes this a recursive endevour. As we can push the
protected flag forward only if a single solution for a dependency exists
it is easy for trees to not get it, so if resolving becomes difficult it
won't help at all.
</content>
</entry>
<entry>
<title>Propagate protected to already satisfied conflicts</title>
<updated>2020-05-18T13:55:36Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-16T09:17:21Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=57df27397b1a10e50d5876482a30b9dedb2ad219'/>
<id>urn:sha1:57df27397b1a10e50d5876482a30b9dedb2ad219</id>
<content type='text'>
If we propagate protected e.g. due to a user request we should also act
upon (at the moment) satisfied negative dependencies so that the
resolver knows that installing this package later is not an option.

That the problem resolver is trying bad solutions is a bug by
itself which existed before and after and should be worked on.

Closes: #960705
</content>
</entry>
<entry>
<title>Deal with protected solution providers first</title>
<updated>2020-05-18T13:55:36Z</updated>
<author>
<name>David Kalnischkies</name>
<email>david@kalnischkies.de</email>
</author>
<published>2020-05-17T17:47:29Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=55d4d1b51c0d2b78b76f2b233714ed3914b695cf'/>
<id>urn:sha1:55d4d1b51c0d2b78b76f2b233714ed3914b695cf</id>
<content type='text'>
For positive dependencies this isn't giving much as the dependency
should already be satisfied by such a provider if its protectiveness
would help, but it doesn't hurt to check them first and for negative
dependencies it means that we check those first which are the most
likely to fail to be removed – which is a good idea.
</content>
</entry>
</feed>
