summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-05-08 22:13:52 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-08 22:13:52 -0700
commitb3d51db7521faa2f7c2dbc0d71894e46e74231d0 (patch)
treee13da5e934c3475897332958f860f232d272098b
parenta983fc1c83402dbfe0a423bf729c72eeb795388c (diff)
downloadportage-b3d51db7521faa2f7c2dbc0d71894e46e74231d0.tar.gz
portage-b3d51db7521faa2f7c2dbc0d71894e46e74231d0.tar.bz2
portage-b3d51db7521faa2f7c2dbc0d71894e46e74231d0.zip
unmerge: use expand_new_virt for sys pkg warnings
-rw-r--r--pym/_emerge/actions.py64
-rw-r--r--pym/_emerge/unmerge.py9
-rw-r--r--pym/portage/dbapi/_expand_new_virt.py66
3 files changed, 76 insertions, 63 deletions
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 29ecb3871..9bc3aafc5 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -31,7 +31,8 @@ from portage.cache.cache_errors import CacheError
from portage.const import GLOBAL_CONFIG_PATH, NEWS_LIB_PATH
from portage.const import _ENABLE_DYN_LINK_MAP, _ENABLE_SET_CONFIG
from portage.dbapi.dep_expand import dep_expand
-from portage.dep import Atom, extended_cp_match, _get_useflag_re
+from portage.dbapi._expand_new_virt import expand_new_virt
+from portage.dep import Atom, extended_cp_match
from portage.exception import InvalidAtom
from portage.output import blue, bold, colorize, create_color_func, darkgreen, \
red, yellow
@@ -1282,67 +1283,6 @@ def action_deselect(settings, trees, opts, atoms):
world_set.unlock()
return os.EX_OK
-def expand_new_virt(vardb, atom):
- """
- Iterate over the recursively expanded RDEPEND atoms of
- a new-style virtual. If atom is not a new-style virtual
- or it does not match an installed package then it is
- yielded without any expansion.
- """
- if not isinstance(atom, Atom):
- atom = Atom(atom)
- traversed = set()
- stack = [atom]
-
- while stack:
- atom = stack.pop()
- if atom.blocker:
- yield atom
- continue
-
- matches = vardb.match(atom)
- if not (matches and matches[-1].startswith("virtual/")):
- yield atom
- continue
-
- virt_cpv = matches[-1]
- if virt_cpv in traversed:
- continue
-
- traversed.add(virt_cpv)
- eapi, iuse, rdepend, use = vardb.aux_get(virt_cpv,
- ["EAPI", "IUSE", "RDEPEND", "USE"])
- if not portage.eapi_is_supported(eapi):
- yield atom
- continue
-
- # Validate IUSE and IUSE, for early detection of vardb corruption.
- useflag_re = _get_useflag_re(eapi)
- valid_iuse = []
- for x in iuse.split():
- if x[:1] in ("+", "-"):
- x = x[1:]
- if useflag_re.match(x) is not None:
- valid_iuse.append(x)
- valid_iuse = frozenset(valid_iuse)
-
- iuse_implicit_match = vardb.settings._iuse_implicit_match
- valid_use = []
- for x in use.split():
- if x in valid_iuse or iuse_implicit_match(x):
- valid_use.append(x)
- valid_use = frozenset(valid_use)
-
- success, atoms = portage.dep_check(rdepend,
- None, vardb.settings, myuse=valid_use,
- myroot=vardb.root, trees={vardb.root:{"porttree":vardb.vartree,
- "vartree":vardb.vartree}})
-
- if success:
- stack.extend(atoms)
- else:
- yield atom
-
class _info_pkgs_ver(object):
def __init__(self, ver, repo_suffix, provide_suffix):
self.ver = ver
diff --git a/pym/_emerge/unmerge.py b/pym/_emerge/unmerge.py
index 68b61edc2..7e66ff9fb 100644
--- a/pym/_emerge/unmerge.py
+++ b/pym/_emerge/unmerge.py
@@ -8,6 +8,7 @@ import sys
import textwrap
import portage
from portage import os
+from portage.dbapi._expand_new_virt import expand_new_virt
from portage.output import bold, colorize, darkgreen, green
from portage._sets import SETPREFIX
from portage.util import cmp_sort_key
@@ -57,7 +58,13 @@ def unmerge(root_config, myopts, unmerge_action,
try:
if os.access(vdb_path, os.W_OK):
vdb_lock = portage.locks.lockdir(vdb_path)
- realsyslist = sets["system"].getAtoms()
+
+ realsyslist = []
+ for x in sets["system"].getAtoms():
+ for atom in expand_new_virt(vartree.dbapi, x):
+ if not atom.blocker:
+ realsyslist.append(atom)
+
syslist = []
for x in realsyslist:
mycp = portage.dep_getkey(x)
diff --git a/pym/portage/dbapi/_expand_new_virt.py b/pym/portage/dbapi/_expand_new_virt.py
new file mode 100644
index 000000000..7a233f10b
--- /dev/null
+++ b/pym/portage/dbapi/_expand_new_virt.py
@@ -0,0 +1,66 @@
+# Copyright 2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import portage
+from portage.dep import Atom, _get_useflag_re
+
+def expand_new_virt(vardb, atom):
+ """
+ Iterate over the recursively expanded RDEPEND atoms of
+ a new-style virtual. If atom is not a new-style virtual
+ or it does not match an installed package then it is
+ yielded without any expansion.
+ """
+ if not isinstance(atom, Atom):
+ atom = Atom(atom)
+ traversed = set()
+ stack = [atom]
+
+ while stack:
+ atom = stack.pop()
+ if atom.blocker:
+ yield atom
+ continue
+
+ matches = vardb.match(atom)
+ if not (matches and matches[-1].startswith("virtual/")):
+ yield atom
+ continue
+
+ virt_cpv = matches[-1]
+ if virt_cpv in traversed:
+ continue
+
+ traversed.add(virt_cpv)
+ eapi, iuse, rdepend, use = vardb.aux_get(virt_cpv,
+ ["EAPI", "IUSE", "RDEPEND", "USE"])
+ if not portage.eapi_is_supported(eapi):
+ yield atom
+ continue
+
+ # Validate IUSE and IUSE, for early detection of vardb corruption.
+ useflag_re = _get_useflag_re(eapi)
+ valid_iuse = []
+ for x in iuse.split():
+ if x[:1] in ("+", "-"):
+ x = x[1:]
+ if useflag_re.match(x) is not None:
+ valid_iuse.append(x)
+ valid_iuse = frozenset(valid_iuse)
+
+ iuse_implicit_match = vardb.settings._iuse_implicit_match
+ valid_use = []
+ for x in use.split():
+ if x in valid_iuse or iuse_implicit_match(x):
+ valid_use.append(x)
+ valid_use = frozenset(valid_use)
+
+ success, atoms = portage.dep_check(rdepend,
+ None, vardb.settings, myuse=valid_use,
+ myroot=vardb.root, trees={vardb.root:{"porttree":vardb.vartree,
+ "vartree":vardb.vartree}})
+
+ if success:
+ stack.extend(atoms)
+ else:
+ yield atom