1 |
commit: 2a2b9e6485950757c59a1d5aa026d7f875311def |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Jan 31 10:01:48 2011 +0000 |
4 |
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Jan 31 10:01:48 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2a2b9e64 |
7 |
|
8 |
Display: Simplify mask code for bug #58416. |
9 |
|
10 |
Hopefully this makes the logic more understandable, though it may |
11 |
support fewer cases. If we want to handle more cases then hopefully |
12 |
we can do it without making the code too complex. |
13 |
|
14 |
--- |
15 |
pym/_emerge/Package.py | 31 ++++++++++--------- |
16 |
pym/_emerge/resolver/output.py | 11 ++++--- |
17 |
.../package/ebuild/_config/KeywordsManager.py | 23 ++------------ |
18 |
pym/portage/package/ebuild/config.py | 10 +----- |
19 |
4 files changed, 28 insertions(+), 47 deletions(-) |
20 |
|
21 |
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py |
22 |
index 9f21057..dcc6a0c 100644 |
23 |
--- a/pym/_emerge/Package.py |
24 |
+++ b/pym/_emerge/Package.py |
25 |
@@ -237,25 +237,26 @@ class Package(Task): |
26 |
|
27 |
return True |
28 |
|
29 |
- def accepted_keyword(self): |
30 |
- """returns the keyword used from the ebuild's KEYWORDS string""" |
31 |
+ def get_keyword_mask(self): |
32 |
+ """returns None, 'missing', or 'unstable'.""" |
33 |
|
34 |
- missing, _keywords = \ |
35 |
- self.root_config.settings._getRawMissingKeywords( |
36 |
- self.cpv, self.metadata) |
37 |
- unmasks = self.root_config.settings._getPKeywords( |
38 |
+ missing = self.root_config.settings._getRawMissingKeywords( |
39 |
self.cpv, self.metadata) |
40 |
|
41 |
+ if not missing: |
42 |
+ return None |
43 |
+ |
44 |
if '**' in missing: |
45 |
- return '**' |
46 |
- if missing: # keywords to evaluate |
47 |
- for keyword in _keywords + unmasks: |
48 |
- if keyword == '**': |
49 |
- return keyword |
50 |
- used_keyword = '~' + keyword |
51 |
- if used_keyword in missing: |
52 |
- return used_keyword |
53 |
- return '' |
54 |
+ return 'missing' |
55 |
+ |
56 |
+ global_accept_keywords = frozenset( |
57 |
+ self.root_config.settings.get("ACCEPT_KEYWORDS", "").split()) |
58 |
+ |
59 |
+ for keyword in missing: |
60 |
+ if keyword.lstrip("~") in global_accept_keywords: |
61 |
+ return 'unstable' |
62 |
+ |
63 |
+ return 'missing' |
64 |
|
65 |
def isHardMasked(self): |
66 |
"""returns a bool if the cpv is in the list of |
67 |
|
68 |
diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py |
69 |
index be07656..46e2280 100644 |
70 |
--- a/pym/_emerge/resolver/output.py |
71 |
+++ b/pym/_emerge/resolver/output.py |
72 |
@@ -164,16 +164,17 @@ class Display(object): |
73 |
""" |
74 |
@param pkg: _emerge.Package instance |
75 |
""" |
76 |
- used_keyword = pkg.accepted_keyword() |
77 |
hardmasked = pkg.isHardMasked() |
78 |
mask_str = " " |
79 |
|
80 |
if hardmasked: |
81 |
mask_str = colorize("BAD", "#") |
82 |
- elif not used_keyword: |
83 |
- pass |
84 |
- elif used_keyword not in self.pkgsettings['ACCEPT_KEYWORDS'].split(): |
85 |
- if used_keyword == "**": |
86 |
+ else: |
87 |
+ keyword_mask = pkg.get_keyword_mask() |
88 |
+ |
89 |
+ if keyword_mask is None: |
90 |
+ pass |
91 |
+ elif keyword_mask == "missing": |
92 |
mask_str = colorize("BAD", "*") |
93 |
else: |
94 |
mask_str = colorize("WARN", "~") |
95 |
|
96 |
diff --git a/pym/portage/package/ebuild/_config/KeywordsManager.py b/pym/portage/package/ebuild/_config/KeywordsManager.py |
97 |
index 0b593f6..51270f2 100644 |
98 |
--- a/pym/portage/package/ebuild/_config/KeywordsManager.py |
99 |
+++ b/pym/portage/package/ebuild/_config/KeywordsManager.py |
100 |
@@ -142,14 +142,13 @@ class KeywordsManager(object): |
101 |
slot, |
102 |
keywords, |
103 |
repo, |
104 |
- global_accept_keywords, |
105 |
- backuped_accept_keywords): |
106 |
+ global_accept_keywords): |
107 |
""" |
108 |
Take a package and return a list of any KEYWORDS that the user may |
109 |
need to accept for the given package. If the KEYWORDS are empty, |
110 |
the returned list will contain ** alone (in order to distinguish |
111 |
from the case of "none missing"). This DOES NOT apply any user config |
112 |
- keywording acceptance. |
113 |
+ package.accept_keywords acceptance. |
114 |
|
115 |
@param cpv: The package name (for package.keywords support) |
116 |
@type cpv: String |
117 |
@@ -159,29 +158,15 @@ class KeywordsManager(object): |
118 |
@type keywords: String |
119 |
@param global_accept_keywords: The current value of ACCEPT_KEYWORDS |
120 |
@type global_accept_keywords: String |
121 |
- @param backuped_accept_keywords: ACCEPT_KEYWORDS from the backup env |
122 |
- @type backuped_accept_keywords: String |
123 |
@rtype: List |
124 |
@return: lists of KEYWORDS that have not been accepted |
125 |
and the keywords it looked for. |
126 |
""" |
127 |
|
128 |
mygroups = self.getKeywords(cpv, slot, keywords, repo) |
129 |
- # Repoman may modify this attribute as necessary. |
130 |
pgroups = global_accept_keywords.split() |
131 |
- |
132 |
- # Hack: Need to check the env directly here as otherwise stacking |
133 |
- # doesn't work properly as negative values are lost in the config |
134 |
- # object (bug #139600) |
135 |
- if backuped_accept_keywords: |
136 |
- pgroups = self._getEgroups(backuped_accept_keywords.split(), |
137 |
- pgroups) |
138 |
- else: |
139 |
- pgroups = set(pgroups) |
140 |
- |
141 |
- missing = self._getMissingKeywords(cpv, pgroups, mygroups) |
142 |
- |
143 |
- return missing, list(pgroups) |
144 |
+ pgroups = set(pgroups) |
145 |
+ return self._getMissingKeywords(cpv, pgroups, mygroups) |
146 |
|
147 |
|
148 |
@staticmethod |
149 |
|
150 |
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py |
151 |
index 81657aa..1f943e4 100644 |
152 |
--- a/pym/portage/package/ebuild/config.py |
153 |
+++ b/pym/portage/package/ebuild/config.py |
154 |
@@ -1456,7 +1456,7 @@ class config(object): |
155 |
need to accept for the given package. If the KEYWORDS are empty, |
156 |
the returned list will contain ** alone (in order to distinguish |
157 |
from the case of "none missing"). This DOES NOT apply any user config |
158 |
- keywording acceptance. |
159 |
+ package.accept_keywords acceptance. |
160 |
|
161 |
@param cpv: The package name (for package.keywords support) |
162 |
@type cpv: String |
163 |
@@ -1466,15 +1466,9 @@ class config(object): |
164 |
@return: lists of KEYWORDS that have not been accepted |
165 |
and the keywords it looked for. |
166 |
""" |
167 |
- |
168 |
- # Hack: Need to check the env directly here as otherwise stacking |
169 |
- # doesn't work properly as negative values are lost in the config |
170 |
- # object (bug #139600) |
171 |
- backuped_accept_keywords = self.configdict["backupenv"].get("ACCEPT_KEYWORDS", "") |
172 |
- |
173 |
return self._keywords_manager.getRawMissingKeywords(cpv, metadata["SLOT"], \ |
174 |
metadata.get("KEYWORDS", ""), metadata.get('repository'), \ |
175 |
- self.get("ACCEPT_KEYWORDS", ""), backuped_accept_keywords) |
176 |
+ self.get("ACCEPT_KEYWORDS", "")) |
177 |
|
178 |
def _getPKeywords(self, cpv, metadata): |
179 |
global_accept_keywords = self.get("ACCEPT_KEYWORDS", "") |