Fix bugs in action_deselect() and add --pretend support. (trunk r13364)
authorZac Medico <zmedico@gentoo.org>
Thu, 30 Apr 2009 07:19:22 +0000 (07:19 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 30 Apr 2009 07:19:22 +0000 (07:19 -0000)
svn path=/main/branches/2.1.6/; revision=13520

pym/_emerge/__init__.py

index 3ba88eccc158148c60f0e546d0d0c0fcbebbf5d1..7d22e0277a082e3c41ba48a6992e18b2cf393433 100644 (file)
@@ -13889,8 +13889,9 @@ def action_deselect(settings, trees, opts, atoms):
                writemsg_level("World set does not appear to be mutable.\n",
                        level=logging.ERROR, noiselevel=-1)
                return 1
+       pretend = '--pretend' in opts
        locked = False
-       if not hasattr(world_set, 'lock'):
+       if not pretend and hasattr(world_set, 'lock'):
                world_set.lock()
                locked = True
        try:
@@ -13902,16 +13903,18 @@ def action_deselect(settings, trees, opts, atoms):
                                # nested set
                                continue
                        for arg_atom in atoms:
-                               if arg_atom.intersects(atom):
+                               if arg_atom.intersects(atom) and \
+                                       not (arg_atom.slot and not atom.slot):
                                        discard_atoms.add(atom)
-                               break
+                                       break
                if discard_atoms:
                        for atom in sorted(discard_atoms):
                                print ">>> Removing %s from \"world\" favorites file..." % \
                                        colorize("INFORM", str(atom))
                        remaining = set(world_set)
                        remaining.difference_update(discard_atoms)
-                       world_set.replace(remaining)
+                       if not pretend:
+                               world_set.replace(remaining)
                else:
                        print ">>> No matching atoms found in \"world\" favorites file..."
        finally:
@@ -15611,7 +15614,7 @@ def emerge_main():
        if portage.secpass < 2:
                # We've already allowed "--version" and "--help" above.
                if "--pretend" not in myopts and myaction not in ("search","info"):
-                       need_superuser = not \
+                       need_superuser = myaction in ('deselect',) or not \
                                (fetchonly or \
                                (buildpkgonly and secpass >= 1) or \
                                myaction in ("metadata", "regen") or \