Package: apt Version: 0.8.16~exp9 Severity: normal Tags: patch User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu ubuntu-patch precise
If a package Breaks a virtual package with many providers, and the appropriate resolver action is to remove several of those providers, then the resolver goes round one iteration of its master loop - which has a hard limit of 10 iterations, so they are in short supply - per provider. This is not the case for Conflicts, where it deals with all the providers in a single iteration of the master loop. There seems no obvious reason for this discrepancy, and I think it was an oversight when Breaks support was introduced in apt. An example of a failed upgrade resolution due to this bug is here: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/922485 You can see it working its way through xserver-xorg-core's Breaks on xserver-xorg-video-6 one package at a time and eventually running out of iterations, when it would have succeeded if it had got round to processing all the providers. The following patch fixes this: === modified file 'apt-pkg/algorithms.cc' --- apt-pkg/algorithms.cc 2011-11-10 15:56:21 +0000 +++ apt-pkg/algorithms.cc 2012-01-28 01:44:53 +0000 @@ -1098,8 +1098,7 @@ bool pkgProblemResolver::ResolveInternal LEnd->Dep = End; LEnd++; - if (Start->Type != pkgCache::Dep::Conflicts && - Start->Type != pkgCache::Dep::Obsoletes) + if (Start.IsNegative() == false) break; } } Thanks, -- Colin Watson [cjwat...@ubuntu.com] -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org