1 |
Author: zmedico |
2 |
Date: 2008-07-30 06:05:00 +0000 (Wed, 30 Jul 2008) |
3 |
New Revision: 11279 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/portage/dep.py |
7 |
main/trunk/pym/portage/tests/dep/test_isvalidatom.py |
8 |
Log: |
9 |
* Add more use dep validation. |
10 |
* Fix broken handling of !foo? reported by ABCD. |
11 |
|
12 |
|
13 |
Modified: main/trunk/pym/portage/dep.py |
14 |
=================================================================== |
15 |
--- main/trunk/pym/portage/dep.py 2008-07-30 04:57:34 UTC (rev 11278) |
16 |
+++ main/trunk/pym/portage/dep.py 2008-07-30 06:05:00 UTC (rev 11279) |
17 |
@@ -347,6 +347,8 @@ |
18 |
_conditionals_class = portage.cache.mappings.slot_dict_class( |
19 |
("disabled", "enabled", "equal", "not_equal"), prefix="") |
20 |
|
21 |
+ _valid_use_re = re.compile(r'^[^-?!=][^?!=]*$') |
22 |
+ |
23 |
def __init__(self, use): |
24 |
enabled_flags = [] |
25 |
disabled_flags = [] |
26 |
@@ -357,25 +359,32 @@ |
27 |
for x in use: |
28 |
last_char = x[-1:] |
29 |
first_char = x[:1] |
30 |
+ second_char = x[1:2] |
31 |
if "?" == last_char: |
32 |
- if "-" == first_char: |
33 |
- conditional.disabled.append(x[1:-1]) |
34 |
+ if "!" == first_char: |
35 |
+ conditional.disabled.append( |
36 |
+ self._validate_flag(x, x[1:-1])) |
37 |
else: |
38 |
- conditional.enabled.append(x[:-1]) |
39 |
+ conditional.enabled.append( |
40 |
+ self._validate_flag(x, x[:-1])) |
41 |
elif "=" == last_char: |
42 |
if "-" == first_char: |
43 |
raise InvalidAtom("Invalid use dep: '%s'" % (x,)) |
44 |
if "!" == x[-2:-1]: |
45 |
raise InvalidAtom("Invalid use dep: '%s'" % (x,)) |
46 |
if "!" == first_char: |
47 |
- conditional.not_equal.append(x[1:-1]) |
48 |
+ conditional.not_equal.append( |
49 |
+ self._validate_flag(x, x[1:-1])) |
50 |
else: |
51 |
- conditional.equal.append(x[:-1]) |
52 |
+ conditional.equal.append( |
53 |
+ self._validate_flag(x, x[:-1])) |
54 |
else: |
55 |
+ if "!" == first_char: |
56 |
+ raise InvalidAtom("Invalid use dep: '%s'" % (x,)) |
57 |
if "-" == first_char: |
58 |
- disabled_flags.append(x[1:]) |
59 |
+ disabled_flags.append(self._validate_flag(x, x[1:])) |
60 |
else: |
61 |
- enabled_flags.append(x) |
62 |
+ enabled_flags.append(self._validate_flag(x, x)) |
63 |
|
64 |
self.tokens = use |
65 |
if not isinstance(self.tokens, tuple): |
66 |
@@ -398,6 +407,11 @@ |
67 |
self.conditional = conditional |
68 |
break |
69 |
|
70 |
+ def _validate_flag(self, token, flag): |
71 |
+ if self._valid_use_re.match(flag) is None: |
72 |
+ raise InvalidAtom("Invalid use dep: '%s'" % (token,)) |
73 |
+ return flag |
74 |
+ |
75 |
def __nonzero__(self): |
76 |
return bool(self.tokens) |
77 |
|
78 |
|
79 |
Modified: main/trunk/pym/portage/tests/dep/test_isvalidatom.py |
80 |
=================================================================== |
81 |
--- main/trunk/pym/portage/tests/dep/test_isvalidatom.py 2008-07-30 04:57:34 UTC (rev 11278) |
82 |
+++ main/trunk/pym/portage/tests/dep/test_isvalidatom.py 2008-07-30 06:05:00 UTC (rev 11279) |
83 |
@@ -30,11 +30,16 @@ |
84 |
( "=sys-apps/portage-2.2*:foo[!doc?]", True ), |
85 |
( "=sys-apps/portage-2.2*:foo[doc=]", True ), |
86 |
( "=sys-apps/portage-2.2*:foo[!doc=]", True ), |
87 |
+ ( "=sys-apps/portage-2.2*:foo[!doc]", False ), |
88 |
+ ( "=sys-apps/portage-2.2*:foo[!-doc]", False ), |
89 |
+ ( "=sys-apps/portage-2.2*:foo[!-doc=]", False ), |
90 |
+ ( "=sys-apps/portage-2.2*:foo[!-doc?]", False ), |
91 |
+ ( "=sys-apps/portage-2.2*:foo[-doc?]", False ), |
92 |
( "=sys-apps/portage-2.2*:foo[-doc=]", False ), |
93 |
( "=sys-apps/portage-2.2*:foo[-doc!=]", False ), |
94 |
( "=sys-apps/portage-2.2*:foo[-doc=]", False ), |
95 |
- ( "=sys-apps/portage-2.2*:foo[bar][-baz][doc?][-build?]", False ), |
96 |
- ( "=sys-apps/portage-2.2*:foo[bar,-baz,doc?,-build?]", True ), |
97 |
+ ( "=sys-apps/portage-2.2*:foo[bar][-baz][doc?][!build?]", False ), |
98 |
+ ( "=sys-apps/portage-2.2*:foo[bar,-baz,doc?,!build?]", True ), |
99 |
( "=sys-apps/portage-2.2*:foo[bar,-baz,doc?,!build?,]", False ), |
100 |
( "=sys-apps/portage-2.2*:foo[,bar,-baz,doc?,!build?]", False ), |
101 |
( "=sys-apps/portage-2.2*:foo[bar,-baz][doc?,!build?]", False ), |