Allow multislot packages to be added to the world file
authorZac Medico <zmedico@gentoo.org>
Mon, 5 Nov 2007 22:42:16 +0000 (22:42 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 5 Nov 2007 22:42:16 +0000 (22:42 -0000)
via --noreplace. Having these atoms in the world file
will trigger recommendations to run emaint in some
cases, like when running `emerge -e world`. The atoms
need to be in the world file to prevent multislot
packages from being removed by --depclean though.

svn path=/main/trunk/; revision=8436

pym/_emerge/__init__.py

index 0eb66250e2463f47ae9d1e39ec199cf6d93242b7..933c4ce9b107049f21b0b228f99df1d7cb227426 100644 (file)
@@ -633,15 +633,17 @@ def create_world_atom(pkg_key, metadata, args_set, root_config):
                slot_atom = "%s:%s" % (cp, metadata["SLOT"])
                # First verify the slot is in the portage tree to avoid
                # adding a bogus slot like that produced by multislot.
-               if portdb.match(slot_atom):
-                       # Now verify that the argument is precise enough to identify a
-                       # specific slot.
-                       matches = portdb.match(arg_atom)
-                       matched_slots = set()
-                       for cpv in matches:
-                               matched_slots.add(portdb.aux_get(cpv, ["SLOT"])[0])
-                       if len(matched_slots) == 1:
-                               new_world_atom = slot_atom
+               mydb = portdb
+               if not portdb.match(slot_atom):
+                       mydb = vardb
+               # Now verify that the argument is precise
+               # enough to identify a specific slot.
+               matches = mydb.match(arg_atom)
+               matched_slots = set()
+               for cpv in matches:
+                       matched_slots.add(mydb.aux_get(cpv, ["SLOT"])[0])
+               if len(matched_slots) == 1:
+                       new_world_atom = slot_atom
        if new_world_atom == sets["world"].findAtomForPackage(pkg_key, metadata):
                # Both atoms would be identical, so there's nothing to add.
                return None