Now that unmerge() preserves the order that it's given, if two different
authorZac Medico <zmedico@gentoo.org>
Sun, 17 Feb 2008 01:59:25 +0000 (01:59 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 17 Feb 2008 01:59:25 +0000 (01:59 -0000)
slots of the same package are being unmerged then they are not necessarily
unmerged consecutively. To make the display less confusing, never display
packages as "protected" or "omitted" when they actually belong to the
overall set of "selected" packages to be unmerged.

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

pym/_emerge/__init__.py

index be53f71b8153755b7c77d048fb0f93a262766ef2..6d4ddb3de81aaf1ea2825b3d0f1775fbdf1c352a 100644 (file)
@@ -5048,15 +5048,24 @@ def unmerge(root_config, myopts, unmerge_action,
        finally:
                if vdb_lock:
                        portage.locks.unlockdir(vdb_lock)
+       all_selected = set()
+       for x in pkgmap:
+               all_selected.update(x["selected"])
        for x in xrange(len(pkgmap)):
                selected = pkgmap[x]["selected"]
                if not selected:
                        continue
+               for mytype, mylist in pkgmap[x].iteritems():
+                       if mytype == "selected":
+                               continue
+                       pkgmap[x][mytype] = \
+                               [cpv for cpv in mylist if cpv not in all_selected]
                cp = portage.cpv_getkey(selected[0])
                for y in localtree.dep_match(cp):
                        if y not in pkgmap[x]["omitted"] and \
                           y not in pkgmap[x]["selected"] and \
-                          y not in pkgmap[x]["protected"]:
+                          y not in pkgmap[x]["protected"] and \
+                          y not in all_selected:
                                pkgmap[x]["omitted"].append(y)
                if global_unmerge and not pkgmap[x]["selected"]:
                        #avoid cluttering the preview printout with stuff that isn't getting unmerged