Allow system virtuals to be pruned from the world file in cases where the matched...
authorZac Medico <zmedico@gentoo.org>
Sun, 8 Jul 2007 04:14:35 +0000 (04:14 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 8 Jul 2007 04:14:35 +0000 (04:14 -0000)
svn path=/main/branches/2.1.2/; revision=7198

bin/emerge

index 30541ef6da60b947b9b47a86c617f4138324d7d6..f10f56c95bd6c2aec2eabafb117ba173af229493 100755 (executable)
@@ -726,12 +726,16 @@ def create_world_atom(pkg_key, metadata, args_set, sets, portdb):
                # 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/"):
+               if system_atom:
+                       if not portage.dep_getkey(system_atom).startswith("virtual/"):
+                               return None
                        # 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
+                       providers = portdb.mysettings.getvirtuals().get(
+                               portage.dep_getkey(system_atom))
+                       if providers and len(providers) == 1 and providers[0] == cp:
+                               return None
        return new_world_atom
 
 def filter_iuse_defaults(iuse):