summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/__init__.py17
1 files changed, 14 insertions, 3 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 53e14db1..df2efba4 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -13884,11 +13884,23 @@ def action_uninstall(settings, trees, ldpath_mtimes,
return rval
def action_deselect(settings, trees, opts, atoms):
- world_set = trees[settings['ROOT']]['root_config'].sets['world']
+ root_config = trees[settings['ROOT']]['root_config']
+ world_set = root_config.sets['world']
if not hasattr(world_set, 'update'):
writemsg_level("World set does not appear to be mutable.\n",
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:
+ 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'):
@@ -13897,12 +13909,11 @@ def action_deselect(settings, trees, opts, atoms):
try:
discard_atoms = set()
world_set.load()
- from portage.dep import Atom
for atom in world_set:
if not isinstance(atom, Atom):
# nested set
continue
- for arg_atom in atoms:
+ for arg_atom in expanded_atoms:
if arg_atom.intersects(atom) and \
not (arg_atom.slot and not atom.slot):
discard_atoms.add(atom)