summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-07-06 09:21:44 +0000
committerZac Medico <zmedico@gentoo.org>2007-07-06 09:21:44 +0000
commit63e2bd7bdfa4697d0e8def48ad3b25b2f143dc96 (patch)
tree0ae64205b2b9e5e1b5b7fc1456c00295846c3ff5
parent470c43a6e7deb3fa159e537758d93d5ed22970a8 (diff)
downloadportage-63e2bd7bdfa4697d0e8def48ad3b25b2f143dc96.tar.gz
portage-63e2bd7bdfa4697d0e8def48ad3b25b2f143dc96.tar.bz2
portage-63e2bd7bdfa4697d0e8def48ad3b25b2f143dc96.zip
Don't exclude system virtuals from world since they can match multiple old-style virtuals but only one of them will be pulled in by update or depclean. (trunk r7180)
svn path=/main/branches/2.1.2/; revision=7181
-rwxr-xr-xbin/emerge12
1 files changed, 10 insertions, 2 deletions
diff --git a/bin/emerge b/bin/emerge
index 599c9bd6e..c9ce08464 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -720,8 +720,16 @@ def create_world_atom(pkg_key, metadata, args_set, sets, portdb):
if new_world_atom == sets["world"].findAtomForPackage(pkg_key, metadata):
# Both atoms would be identical, so there's nothing to add.
return None
- if not slotted and sets["system"].findAtomForPackage(pkg_key, metadata):
- return None
+ if not slotted:
+ # Unlike world atoms, system atoms are not greedy for slots, so they
+ # can't be safely excluded from world if they are slotted.
+ system_atom = sets["system"].findAtomForPackage(pkg_key, metadata)
+ if system_atom and \
+ not portage.dep_getkey(system_atom).startswith("virtual/"):
+ # System virtuals aren't safe to exclude from world since they can
+ # match multiple old-style virtuals but only one of them will be
+ # pulled in by update or depclean.
+ return None
return new_world_atom
def filter_iuse_defaults(iuse):