1 |
Author: zmedico |
2 |
Date: 2009-06-25 06:06:14 +0000 (Thu, 25 Jun 2009) |
3 |
New Revision: 13691 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/Package.py |
7 |
main/trunk/pym/_emerge/depgraph.py |
8 |
main/trunk/pym/_emerge/visible.py |
9 |
Log: |
10 |
* Add a Package.invalid attribute to store messages about invalid LICENSE, |
11 |
PROPERTIES, PROVIDE, and RESTRICT metadata. Use it to mask invalid packages |
12 |
when necessary. |
13 |
* Evaluate USE conditional values in Package.metadata when the are accessed. |
14 |
|
15 |
|
16 |
Modified: main/trunk/pym/_emerge/Package.py |
17 |
=================================================================== |
18 |
--- main/trunk/pym/_emerge/Package.py 2009-06-25 04:13:47 UTC (rev 13690) |
19 |
+++ main/trunk/pym/_emerge/Package.py 2009-06-25 06:06:14 UTC (rev 13691) |
20 |
@@ -25,7 +25,7 @@ |
21 |
"installed", "metadata", "onlydeps", "operation", |
22 |
"root_config", "type_name", |
23 |
"category", "counter", "cp", "cpv_split", |
24 |
- "inherited", "iuse", "mtime", |
25 |
+ "inherited", "invalid", "iuse", "mtime", |
26 |
"pf", "pv_split", "root", "slot", "slot_atom",) + \ |
27 |
("_use",) |
28 |
|
29 |
@@ -52,6 +52,11 @@ |
30 |
self.cpv_split = portage.catpkgsplit(self.cpv) |
31 |
self.pv_split = self.cpv_split[1:] |
32 |
|
33 |
+ def _invalid_metadata(self, msg): |
34 |
+ if self.invalid is None: |
35 |
+ self.invalid = [] |
36 |
+ self.invalid.append(msg) |
37 |
+ |
38 |
class _use_class(object): |
39 |
|
40 |
__slots__ = ("__weakref__", "enabled") |
41 |
@@ -156,6 +161,8 @@ |
42 |
__slots__ = ("_pkg",) |
43 |
_wrapped_keys = frozenset( |
44 |
["COUNTER", "INHERITED", "IUSE", "SLOT", "_mtime_"]) |
45 |
+ _use_conditional_keys = frozenset( |
46 |
+ ['LICENSE', 'PROPERTIES', 'PROVIDE', 'RESTRICT',]) |
47 |
|
48 |
def __init__(self, pkg, metadata): |
49 |
_PackageMetadataWrapperBase.__init__(self) |
50 |
@@ -170,11 +177,17 @@ |
51 |
|
52 |
def __getitem__(self, k): |
53 |
v = _PackageMetadataWrapperBase.__getitem__(self, k) |
54 |
- if k in ('PROVIDE', 'LICENSE',): |
55 |
+ if k in self._use_conditional_keys: |
56 |
if '?' in v: |
57 |
- v = paren_enclose(paren_normalize(use_reduce( |
58 |
- paren_reduce(v), uselist=self._pkg.use.enabled))) |
59 |
- self[k] = v |
60 |
+ try: |
61 |
+ v = paren_enclose(paren_normalize(use_reduce( |
62 |
+ paren_reduce(v), uselist=self._pkg.use.enabled))) |
63 |
+ except portage.exception.InvalidDependString: |
64 |
+ # This error should already have been registered via |
65 |
+ # self._pkg._invalid_metadata(). |
66 |
+ pass |
67 |
+ else: |
68 |
+ self[k] = v |
69 |
|
70 |
elif k == 'USE' and not self._pkg.built: |
71 |
if not v: |
72 |
@@ -191,6 +204,11 @@ |
73 |
_PackageMetadataWrapperBase.__setitem__(self, k, v) |
74 |
if k in self._wrapped_keys: |
75 |
getattr(self, "_set_" + k.lower())(k, v) |
76 |
+ elif k in self._use_conditional_keys: |
77 |
+ try: |
78 |
+ use_reduce(paren_reduce(v), matchall=1) |
79 |
+ except portage.exception.InvalidDependString, e: |
80 |
+ self._pkg._invalid_metadata("%s: %s" % (k, e)) |
81 |
|
82 |
def _set_inherited(self, k, v): |
83 |
if isinstance(v, basestring): |
84 |
|
85 |
Modified: main/trunk/pym/_emerge/depgraph.py |
86 |
=================================================================== |
87 |
--- main/trunk/pym/_emerge/depgraph.py 2009-06-25 04:13:47 UTC (rev 13690) |
88 |
+++ main/trunk/pym/_emerge/depgraph.py 2009-06-25 06:06:14 UTC (rev 13691) |
89 |
@@ -4910,6 +4910,9 @@ |
90 |
if not pkgsettings._accept_chost(pkg.cpv, pkg.metadata): |
91 |
mreasons.append("CHOST: %s" % \ |
92 |
pkg.metadata["CHOST"]) |
93 |
+ if pkg.invalid: |
94 |
+ for msg in pkg.invalid: |
95 |
+ mreasons.append("invalid: %s" % (msg,)) |
96 |
|
97 |
if not pkg.metadata["SLOT"]: |
98 |
mreasons.append("invalid: SLOT is undefined") |
99 |
|
100 |
Modified: main/trunk/pym/_emerge/visible.py |
101 |
=================================================================== |
102 |
--- main/trunk/pym/_emerge/visible.py 2009-06-25 04:13:47 UTC (rev 13690) |
103 |
+++ main/trunk/pym/_emerge/visible.py 2009-06-25 06:06:14 UTC (rev 13691) |
104 |
@@ -21,6 +21,8 @@ |
105 |
if not pkg.metadata["SLOT"]: |
106 |
return False |
107 |
if not pkg.installed: |
108 |
+ if pkg.invalid: |
109 |
+ return False |
110 |
if not pkgsettings._accept_chost(pkg.cpv, pkg.metadata): |
111 |
return False |
112 |
eapi = pkg.metadata["EAPI"] |