summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-12-21 06:47:23 +0000
committerZac Medico <zmedico@gentoo.org>2008-12-21 06:47:23 +0000
commit24e15b666aae23d800821343e0040ae8ed6fd575 (patch)
tree001cd563b8465b1c37c2863a52b23b62acd1692b
parentcd6e1824c9b2061dff9fa615a17143b59475b447 (diff)
downloadportage-24e15b666aae23d800821343e0040ae8ed6fd575.tar.gz
portage-24e15b666aae23d800821343e0040ae8ed6fd575.tar.bz2
portage-24e15b666aae23d800821343e0040ae8ed6fd575.zip
Fix --clean <atom> so that it considers all packages within a given slot when
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. svn path=/main/trunk/; revision=12272
-rw-r--r--pym/_emerge/__init__.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index da478e6d6..348b2c20b 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -11064,7 +11064,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:
@@ -11073,6 +11080,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]