summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-04-30 07:19:43 +0000
committerZac Medico <zmedico@gentoo.org>2009-04-30 07:19:43 +0000
commit81feae7409a3f257076322465d79e5cb144c07ea (patch)
tree1cb6b3e462b99c20f25bb40f7ba07efff9aea65f
parentAdd --ask support to action_deselect(). (trunk r13365) (diff)
downloadportage-multirepo-81feae7409a3f257076322465d79e5cb144c07ea.tar.gz
portage-multirepo-81feae7409a3f257076322465d79e5cb144c07ea.tar.bz2
portage-multirepo-81feae7409a3f257076322465d79e5cb144c07ea.zip
In action_deselect(), use the installed packages to expand atoms into slot
atoms. (trunk r13366) svn path=/main/branches/2.1.6/; revision=13522
-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)