summaryrefslogtreecommitdiff
path: root/apt-pkg/depcache.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2012-01-11 18:05:15 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2012-01-11 18:05:15 +0100
commit88a52816d7626326f94c17a3a8fcde08817b7f2b (patch)
tree48be3d95bf4d726efd9cabcbc98dcd7572114d3f /apt-pkg/depcache.cc
parentf23a94d53e451448b80b6aa5b52b5ba418e508a9 (diff)
* apt-pkg/depcache.cc:
- implicit conflicts (for multiarch) are supposed to conflict only with real packages, not with virtual providers
Diffstat (limited to 'apt-pkg/depcache.cc')
-rw-r--r--apt-pkg/depcache.cc16
1 files changed, 11 insertions, 5 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 031fca5c0..3c6dc4325 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -374,11 +374,17 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res)
PkgIterator Pkg = Dep.ParentPkg();
for (; P.end() != true; ++P)
{
- /* Provides may never be applied against the same package (or group)
- if it is a conflicts. See the comment above. */
- if (P.OwnerPkg()->Group == Pkg->Group && Dep.IsNegative() == true)
- continue;
-
+ if (Dep.IsNegative() == true)
+ {
+ /* Provides may never be applied against the same package (or group)
+ if it is a conflicts. See the comment above. */
+ if (P.OwnerPkg()->Group == Pkg->Group)
+ continue;
+ // Implicit group-conflicts should not be applied on providers of other groups
+ if (Pkg->Group == Dep.TargetPkg()->Group && P.OwnerPkg()->Group != Pkg->Group)
+ continue;
+ }
+
// Check if the provides is a hit
if (Type == NowVersion)
{