Fix --clean <atom> so that it considers all packages within a given slot when
authorZac Medico <zmedico@gentoo.org>
Thu, 25 Dec 2008 01:09:39 +0000 (01:09 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 25 Dec 2008 01:09:39 +0000 (01:09 -0000)
it's deciding which packages to keep, rather than just considering the ones
matched by the given atom. Any packages not matching the given atom are protected
from being unmerged. Thanks to Mart Raudsepp <leio@g.o> for reporting.
(trunk r12272)

svn path=/main/branches/2.1.6/; revision=12306

pym/_emerge/__init__.py

index 2fbd2d1a0696e01f572ecd1e1cf9f5d6b98cf188..df61daead422ec71f83f0b072507cafd37ecdfa0 100644 (file)
@@ -11048,7 +11048,14 @@ def unmerge(root_config, myopts, unmerge_action,
                                        if myslot not in slotmap:
                                                slotmap[myslot] = {}
                                        slotmap[myslot][localtree.dbapi.cpv_counter(mypkg)] = mypkg
-                               
+
+                               for mypkg in vartree.dbapi.cp_list(
+                                       portage.dep_getkey(mymatch[0])):
+                                       myslot = vartree.getslot(mypkg)
+                                       if myslot not in slotmap:
+                                               slotmap[myslot] = {}
+                                       slotmap[myslot][vartree.dbapi.cpv_counter(mypkg)] = mypkg
+
                                for myslot in slotmap:
                                        counterkeys = slotmap[myslot].keys()
                                        if not counterkeys:
@@ -11057,6 +11064,14 @@ def unmerge(root_config, myopts, unmerge_action,
                                        pkgmap[mykey]["protected"].add(
                                                slotmap[myslot][counterkeys[-1]])
                                        del counterkeys[-1]
+
+                                       for counter in counterkeys[:]:
+                                               mypkg = slotmap[myslot][counter]
+                                               if mypkg not in mymatch:
+                                                       counterkeys.remove(counter)
+                                                       pkgmap[mykey]["protected"].add(
+                                                               slotmap[myslot][counter])
+
                                        #be pretty and get them in order of merge:
                                        for ckey in counterkeys:
                                                mypkg = slotmap[myslot][ckey]