summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-03-01 13:52:04 -0800
committerZac Medico <zmedico@gentoo.org>2011-03-01 13:54:13 -0800
commitf64dd53bad86a2f91f1b152cfcfa9c4f6eb0b13f (patch)
tree24b3d68550b5c4c42a2a8937665f5e7fdfc63efa /pym
parent99e88f2d30761fa7c72660a97da1f516f1075256 (diff)
downloadportage-f64dd53bad86a2f91f1b152cfcfa9c4f6eb0b13f.tar.gz
portage-f64dd53bad86a2f91f1b152cfcfa9c4f6eb0b13f.tar.bz2
portage-f64dd53bad86a2f91f1b152cfcfa9c4f6eb0b13f.zip
action_deselect: expand cat against world atoms
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/actions.py36
1 files changed, 24 insertions, 12 deletions
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index ea8fc42fc..b683a37e8 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1218,25 +1218,37 @@ def action_deselect(settings, trees, opts, atoms):
level=logging.ERROR, noiselevel=-1)
return 1
- vardb = root_config.trees['vartree'].dbapi
- expanded_atoms = set(atoms)
- from portage.dep import Atom
- for atom in atoms:
- 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
if not pretend and hasattr(world_set, 'lock'):
world_set.lock()
locked = True
try:
- discard_atoms = set()
world_set.load()
+ world_atoms = world_set.getAtoms()
+ vardb = root_config.trees["vartree"].dbapi
+ expanded_atoms = set(atoms)
+
+ for atom in atoms:
+ if not atom.startswith(SETPREFIX):
+ if atom.cp.startswith("null/"):
+ # try to expand category from world set
+ null_cat, pn = portage.catsplit(atom.cp)
+ for world_atom in world_atoms:
+ cat, world_pn = portage.catsplit(world_atom.cp)
+ if pn == world_pn:
+ expanded_atoms.add(
+ Atom(atom.replace("null", cat, 1),
+ allow_repo=True, allow_wildcard=True))
+
+ 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)))
+
+ discard_atoms = set()
for atom in world_set:
for arg_atom in expanded_atoms:
if arg_atom.startswith(SETPREFIX):