Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/
Date: Wed, 27 Apr 2011 14:36:50
Message-Id: ffe4f3feb6cd9b2bc3b38086894fec8133db1834.zmedico@gentoo
1 commit: ffe4f3feb6cd9b2bc3b38086894fec8133db1834
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Wed Apr 27 14:35:57 2011 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Wed Apr 27 14:35:57 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ffe4f3fe
7
8 expand_new_virt: validate EAPI, IUSE and USE
9
10 ---
11 pym/_emerge/actions.py | 29 +++++++++++++++++++++++++----
12 1 files changed, 25 insertions(+), 4 deletions(-)
13
14 diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
15 index c05d7e2..99619fa 100644
16 --- a/pym/_emerge/actions.py
17 +++ b/pym/_emerge/actions.py
18 @@ -31,7 +31,7 @@ from portage.cache.cache_errors import CacheError
19 from portage.const import GLOBAL_CONFIG_PATH, NEWS_LIB_PATH
20 from portage.const import _ENABLE_DYN_LINK_MAP, _ENABLE_SET_CONFIG
21 from portage.dbapi.dep_expand import dep_expand
22 -from portage.dep import Atom, extended_cp_match
23 +from portage.dep import Atom, extended_cp_match, _get_useflag_re
24 from portage.exception import InvalidAtom
25 from portage.output import blue, bold, colorize, create_color_func, darkgreen, \
26 red, yellow
27 @@ -1311,10 +1311,31 @@ def expand_new_virt(vardb, atom):
28 continue
29
30 traversed.add(virt_cpv)
31 - rdepend, use = vardb.aux_get(virt_cpv, ["RDEPEND", "USE"])
32 - use = frozenset(use.split())
33 + eapi, iuse, rdepend, use = vardb.aux_get(virt_cpv,
34 + ["EAPI", "IUSE", "RDEPEND", "USE"])
35 + if not portage.eapi_is_supported(eapi):
36 + yield atom
37 + continue
38 +
39 + # Validate IUSE and IUSE, for early detection of vardb corruption.
40 + useflag_re = _get_useflag_re(eapi)
41 + valid_iuse = []
42 + for x in iuse.split():
43 + if x[:1] in ("+", "-"):
44 + x = x[1:]
45 + if useflag_re.match(x) is not None:
46 + valid_iuse.append(x)
47 + valid_iuse = frozenset(valid_iuse)
48 +
49 + iuse_implicit_match = vardb.settings._iuse_implicit_match
50 + valid_use = []
51 + for x in use.split():
52 + if x in valid_iuse or iuse_implicit_match(x):
53 + valid_use.append(x)
54 + valid_use = frozenset(valid_use)
55 +
56 success, atoms = portage.dep_check(rdepend,
57 - None, vardb.settings, myuse=use,
58 + None, vardb.settings, myuse=valid_use,
59 myroot=vardb.root, trees={vardb.root:{"porttree":vardb.vartree,
60 "vartree":vardb.vartree}})