summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-07-06 09:20:26 +0000
committerZac Medico <zmedico@gentoo.org>2007-07-06 09:20:26 +0000
commit3e05607151525d6366c70186629aa7386e1613e1 (patch)
treed2de7998bbcf00c7e06783807c31e1fb7e3c808b
parent7624651845f34e45f39f2e07ba25c0c268d228bd (diff)
downloadportage-3e05607151525d6366c70186629aa7386e1613e1.tar.gz
portage-3e05607151525d6366c70186629aa7386e1613e1.tar.bz2
portage-3e05607151525d6366c70186629aa7386e1613e1.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.
svn path=/main/trunk/; revision=7180
-rw-r--r--pym/emerge/__init__.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py
index d5a0b053f..dc1df199d 100644
--- a/pym/emerge/__init__.py
+++ b/pym/emerge/__init__.py
@@ -719,8 +719,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):