summaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorSebastian Luther <SebastianLuther@gmx.de>2010-04-29 21:45:25 +0200
committerZac Medico <zmedico@gentoo.org>2010-05-27 01:50:33 -0700
commitb6060200e016b2c6d7fa828cd611a83abc2a0064 (patch)
tree2c08e2dee99ff56c0efbafe31581a154a2711d03 /pym
parentemerge --help: Add --ignore-default-opts (closes bug 246491) (diff)
downloadportage-idfetch-b6060200e016b2c6d7fa828cd611a83abc2a0064.tar.gz
portage-idfetch-b6060200e016b2c6d7fa828cd611a83abc2a0064.tar.bz2
portage-idfetch-b6060200e016b2c6d7fa828cd611a83abc2a0064.zip
Make --deselect work for sets (bug 268798)
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/actions.py30
-rw-r--r--pym/_emerge/help.py2
-rw-r--r--pym/_emerge/main.py2
3 files changed, 20 insertions, 14 deletions
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 78f564c9..148b8c31 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1164,11 +1164,12 @@ def action_deselect(settings, trees, opts, atoms):
expanded_atoms = set(atoms)
from portage.dep import Atom
for atom in atoms:
- for cpv in vardb.match(atom):
- slot, = vardb.aux_get(cpv, ['SLOT'])
- if not slot:
- slot = '0'
- expanded_atoms.add(Atom('%s:%s' % (portage.cpv_getkey(cpv), slot)))
+ if not atom.startswith(SETPREFIX):
+ for cpv in vardb.match(atom):
+ slot, = vardb.aux_get(cpv, ['SLOT'])
+ if not slot:
+ slot = '0'
+ expanded_atoms.add(Atom('%s:%s' % (portage.cpv_getkey(cpv), slot)))
pretend = '--pretend' in opts
locked = False
@@ -1179,14 +1180,16 @@ def action_deselect(settings, trees, opts, atoms):
discard_atoms = set()
world_set.load()
for atom in world_set:
- if not isinstance(atom, Atom):
- # nested set
- continue
for arg_atom in expanded_atoms:
- if arg_atom.intersects(atom) and \
- not (arg_atom.slot and not atom.slot):
- discard_atoms.add(atom)
- break
+ if arg_atom.startswith(SETPREFIX):
+ if arg_atom == atom:
+ discard_atoms.add(atom)
+ break
+ else:
+ if arg_atom.intersects(atom) and \
+ not (arg_atom.slot and not atom.slot):
+ discard_atoms.add(atom)
+ break
if discard_atoms:
for atom in sorted(discard_atoms):
print(">>> Removing %s from \"world\" favorites file..." % \
@@ -2310,6 +2313,9 @@ def action_uninstall(settings, trees, ldpath_mtimes,
# multiple files in a single iter_owners() call.
lookup_owners.append(x)
+ elif x.startswith(SETPREFIX) and action == "deselect":
+ valid_atoms.append(x)
+
else:
msg = []
msg.append("'%s' is not a valid package atom." % (x,))
diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py
index d9994d27..8d6fcb25 100644
--- a/pym/_emerge/help.py
+++ b/pym/_emerge/help.py
@@ -108,7 +108,7 @@ def help(myopts, havecolor=1):
print(" " + green("--deselect") + "[=%s]" % turquoise("n"))
paragraph = \
- "Remove atoms from the world file. This action is implied " + \
+ "Remove atoms and/or sets from the world file. This action is implied " + \
"by uninstall actions, including --depclean, " + \
"--prune and --unmerge. Use --deselect=n " + \
"in order to prevent uninstall actions from removing " + \
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index 5422d32b..ca3d17be 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -555,7 +555,7 @@ def parse_opts(tmpcmdline, silent=False):
},
"--deselect": {
- "help" : "remove atoms from the world file",
+ "help" : "remove atoms/sets from the world file",
"type" : "choice",
"choices" : ("True", "n")
},