On Sun, Apr 09, 2017 at 01:51:45AM +0200, Andreas Beckmann wrote: > The relevant bits of the dependency chain seem to be: > > Package: parl-desktop-world > Depends: icedove-l10n-cs, myspell-cs > > Package: icedove-l10n-cs > Depends: thunderbird-l10n-cs > > Package: thunderbird-l10n-cs > Recommends: hunspell-cs | myspell-cs-cz > > Package: hunspell-cs > Conflicts: myspell-cs > > Package: myspell-cs > Replaces: myspell-cs-cz > Provides: myspell-cs-cz > Conflicts: myspell-cs-cz
For a human that seems sensible, but if you know that apt is recursively operating on the dependencies and/or looking at the "right" debug option [0] you will notice that this is actually about thunderbird-l10n-cs being found first where apt picks hunspell-cs because the first alternative is to be preferred and at a later point stumbles over firefox-esr-l10n-cs which recommends myspell-cs-cz (only), so ideally it would reconsider its earlier choices at this point… It is well-known that APT (and any greedy algorithm really) has its problems if it must undo a decision it had formed before. APT has various heuristics trying to allow such undos anyhow, but those fail here as myspell-cs is considered the less favorable option… Obviously, we could add another heuristic here making it work somehow – that tends to add non-trivial amount of code with non-zero regression potential (and I don't have a real idea how that heuristic would look like). The "simple" workaround for this specific instance is to reorder the dependencies of parl-desktop-world as in having myspell-cs first, that way the choice is already made at the time thunderbird-l10n-cs joins the party and hunspell-cs is never considered. Now, the "obvious" idea would be to have apt look at all dependencies at once which would work in this instance – but just by "accident". If parl-desktop-world wouldn't have a myspell-cs dependency at all we would still have this conflict occur in distinct subtrees [1]. So the "real" solution would include collecting in the entire tree all dependencies which have only one solution, install all of them and so avoiding to take decisions as long as we can. Problem here is: It is not trivial to find how many solutions a dependencies has due to e.g. Provides and Multi-Arch: foreign so you are quickly wasting a lot of time (ignoring all the problems you have while collection the dependencies). From that short paragraph alone you can guess that this is non-trivial aka not for stretch. It is in fact basically a new resolver which we get ever so slightly closer to cleanly switch between different ones as a first step, but there is still quite a bit of road ahead. Best regards David Kalnischkies [0] -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1 [1] apt would not fail, but it still picks the hunspell-cs solution which isn't ideal as it causes broken recommends.
signature.asc
Description: PGP signature