summaryrefslogtreecommitdiff
path: root/apt-pkg/pkgcache.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2012-01-13 12:48:41 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2012-01-13 12:48:41 +0100
commit5f909b67fb903f700df1bd6242ada86d58c0b068 (patch)
tree851f2c2230faf51b59054fb5515c8069c0d7e701 /apt-pkg/pkgcache.cc
parent88a52816d7626326f94c17a3a8fcde08817b7f2b (diff)
* apt-pkg/pkgcache.cc:
- ignore implicit conflicts on providers in AllTarget, too
Diffstat (limited to 'apt-pkg/pkgcache.cc')
-rw-r--r--apt-pkg/pkgcache.cc17
1 files changed, 12 insertions, 5 deletions
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
index c854249e4..5361696d0 100644
--- a/apt-pkg/pkgcache.cc
+++ b/apt-pkg/pkgcache.cc
@@ -636,11 +636,18 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const
{
if (Owner->VS->CheckDep(I.ProvideVersion(),S->CompareOp,TargetVer()) == false)
continue;
-
- if (IsNegative() == true &&
- ParentPkg()->Group == I.OwnerPkg()->Group)
- continue;
-
+
+ if (IsNegative() == true)
+ {
+ /* Provides may never be applied against the same package (or group)
+ if it is a conflicts. See the comment above. */
+ if (I.OwnerPkg()->Group == ParentPkg()->Group)
+ continue;
+ // Implicit group-conflicts should not be applied on providers of other groups
+ if (ParentPkg()->Group == TargetPkg()->Group && I.OwnerPkg()->Group != ParentPkg()->Group)
+ continue;
+ }
+
Size++;
if (Res != 0)
*End++ = I.OwnerVer();