Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r13691 - main/trunk/pym/_emerge
Date: Thu, 25 Jun 2009 06:06:17
Message-Id: E1MJi6B-0006yn-Cw@stork.gentoo.org
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"]