1 |
commit: 5b723290dfc9b643fec3c437fb5f39ee2ece1a6f |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Jun 4 01:19:10 2012 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Jun 4 01:19:10 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5b723290 |
7 |
|
8 |
Package: calc visiblity on demand |
9 |
|
10 |
This delays visiblity calculations until after FakeVartree applies its |
11 |
metadata tweaks, so commit 650c960be3170bade8bb63ddedcd4796c75ec374 |
12 |
will work as intended. |
13 |
|
14 |
--- |
15 |
pym/_emerge/Package.py | 49 +++++++++++++++++++++++++++++++++-------------- |
16 |
1 files changed, 34 insertions(+), 15 deletions(-) |
17 |
|
18 |
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py |
19 |
index c04fa1f..bdd4bc7 100644 |
20 |
--- a/pym/_emerge/Package.py |
21 |
+++ b/pym/_emerge/Package.py |
22 |
@@ -25,9 +25,9 @@ class Package(Task): |
23 |
"installed", "metadata", "onlydeps", "operation", |
24 |
"root_config", "type_name", |
25 |
"category", "counter", "cp", "cpv_split", |
26 |
- "inherited", "invalid", "iuse", "masks", "mtime", |
27 |
- "pf", "root", "slot", "slot_atom", "version", "visible",) + \ |
28 |
- ("_raw_metadata", "_use",) |
29 |
+ "inherited", "iuse", "mtime", |
30 |
+ "pf", "root", "slot", "slot_atom", "version") + \ |
31 |
+ ("_invalid", "_raw_metadata", "_masks", "_use", "_visible") |
32 |
|
33 |
metadata_keys = [ |
34 |
"BUILD_TIME", "CHOST", "COUNTER", "DEPEND", "EAPI", |
35 |
@@ -73,9 +73,6 @@ class Package(Task): |
36 |
if self.inherited is None: |
37 |
self.inherited = frozenset() |
38 |
|
39 |
- self._validate_deps() |
40 |
- self.masks = self._masks() |
41 |
- self.visible = self._visible(self.masks) |
42 |
if self.operation is None: |
43 |
if self.onlydeps or self.installed: |
44 |
self.operation = "nomerge" |
45 |
@@ -89,6 +86,28 @@ class Package(Task): |
46 |
type_name=self.type_name) |
47 |
self._hash_value = hash(self._hash_key) |
48 |
|
49 |
+ # These are calculated on-demand, so that they are calculated |
50 |
+ # after FakeVartree applies its metadata tweaks. |
51 |
+ @property |
52 |
+ def invalid(self): |
53 |
+ if self._invalid is None: |
54 |
+ self._validate_deps() |
55 |
+ if self._invalid is None: |
56 |
+ self._invalid = False |
57 |
+ return self._invalid |
58 |
+ |
59 |
+ @property |
60 |
+ def masks(self): |
61 |
+ if self._masks is None: |
62 |
+ self._masks = self._eval_masks() |
63 |
+ return self._masks |
64 |
+ |
65 |
+ @property |
66 |
+ def visible(self): |
67 |
+ if self._visible is None: |
68 |
+ self._visible = self._eval_visiblity(self.masks) |
69 |
+ return self._visible |
70 |
+ |
71 |
@classmethod |
72 |
def _gen_hash_key(cls, cpv=None, installed=None, onlydeps=None, |
73 |
operation=None, repo_name=None, root_config=None, |
74 |
@@ -205,11 +224,11 @@ class Package(Task): |
75 |
onlydeps=self.onlydeps, operation=self.operation, |
76 |
root_config=self.root_config, type_name=self.type_name) |
77 |
|
78 |
- def _masks(self): |
79 |
+ def _eval_masks(self): |
80 |
masks = {} |
81 |
settings = self.root_config.settings |
82 |
|
83 |
- if self.invalid is not None: |
84 |
+ if self.invalid is not False: |
85 |
masks['invalid'] = self.invalid |
86 |
|
87 |
if not settings._accept_chost(self.cpv, self.metadata): |
88 |
@@ -249,13 +268,13 @@ class Package(Task): |
89 |
pass |
90 |
|
91 |
if not masks: |
92 |
- masks = None |
93 |
+ masks = False |
94 |
|
95 |
return masks |
96 |
|
97 |
- def _visible(self, masks): |
98 |
+ def _eval_visiblity(self, masks): |
99 |
|
100 |
- if masks is not None: |
101 |
+ if masks is not False: |
102 |
|
103 |
if 'EAPI.unsupported' in masks: |
104 |
return False |
105 |
@@ -338,12 +357,12 @@ class Package(Task): |
106 |
_unicode_decode("%s: %s in '%s'") % (k, e, path)) |
107 |
|
108 |
def _invalid_metadata(self, msg_type, msg): |
109 |
- if self.invalid is None: |
110 |
- self.invalid = {} |
111 |
- msgs = self.invalid.get(msg_type) |
112 |
+ if self._invalid is None: |
113 |
+ self._invalid = {} |
114 |
+ msgs = self._invalid.get(msg_type) |
115 |
if msgs is None: |
116 |
msgs = [] |
117 |
- self.invalid[msg_type] = msgs |
118 |
+ self._invalid[msg_type] = msgs |
119 |
msgs.append(msg) |
120 |
|
121 |
def __str__(self): |