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}}) |