1 |
Three new settings were added to /etc/portage/color.map: |
2 |
PKG_MERGE_USER_SET, PKG_BINARY_MERGE_USER_SET, and |
3 |
PKG_NOMERGE_USER_SET. These colors are applied when the package is |
4 |
selected from a set in /etc/portage/sets/ |
5 |
|
6 |
X-Gentoo-bug: 577720 |
7 |
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=577720 |
8 |
--- |
9 |
[PATCH v3] Updates based on feedback from IRC meeting |
10 |
[PATCH v2] Simplification of check_sets ref Alexander Berntsen's feedback |
11 |
|
12 |
cnf/sets/portage.conf | 1 + |
13 |
doc/config/sets.docbook | 4 +++- |
14 |
man/color.map.5 | 11 ++++++++++ |
15 |
man/portage.5 | 1 + |
16 |
pym/_emerge/resolver/output.py | 25 +++++++++++++++------- |
17 |
pym/_emerge/resolver/output_helpers.py | 15 ++++++++++--- |
18 |
pym/portage/_sets/__init__.py | 8 +++++++ |
19 |
pym/portage/_sets/base.py | 1 + |
20 |
pym/portage/output.py | 39 ++++++++++++++++++---------------- |
21 |
9 files changed, 75 insertions(+), 30 deletions(-) |
22 |
|
23 |
diff --git a/cnf/sets/portage.conf b/cnf/sets/portage.conf |
24 |
index ac282d9..e990620 100644 |
25 |
--- a/cnf/sets/portage.conf |
26 |
+++ b/cnf/sets/portage.conf |
27 |
@@ -49,6 +49,7 @@ class = portage.sets.files.StaticFileSet |
28 |
multiset = true |
29 |
directory = %(PORTAGE_CONFIGROOT)setc/portage/sets |
30 |
world-candidate = True |
31 |
+user-set = True |
32 |
|
33 |
# Set to rebuild all packages that need a preserved lib that only remains due |
34 |
# to FEATURES=preserve-libs |
35 |
diff --git a/doc/config/sets.docbook b/doc/config/sets.docbook |
36 |
index 749b775..02135d6 100644 |
37 |
--- a/doc/config/sets.docbook |
38 |
+++ b/doc/config/sets.docbook |
39 |
@@ -57,6 +57,8 @@ |
40 |
is missing)</para></listitem> |
41 |
<listitem><para><varname>world-candidate</varname>, which determines if |
42 |
given package should be added to the <varname>world</varname> set</para></listitem> |
43 |
+ <listitem><para><varname>user-set</varname>, which determines if |
44 |
+ given package should be colorized as a user set</para></listitem> |
45 |
</itemizedlist> |
46 |
<para> |
47 |
Some handler classes might require additional options for their configuration, |
48 |
@@ -93,7 +95,7 @@ |
49 |
but to indicate that the section should generate multiple sets it's |
50 |
also necessary to set the <varname>multiset</varname> option to |
51 |
<parameter>true</parameter>. The <varname>world-candidate</varname> |
52 |
- option also supported like with |
53 |
+ and <varname>user-set</varname> options are also supported like with |
54 |
single sets (they'll apply to all sets generated by the section). |
55 |
</para> |
56 |
<para> |
57 |
diff --git a/man/color.map.5 b/man/color.map.5 |
58 |
index 5543628..39f23f7 100644 |
59 |
--- a/man/color.map.5 |
60 |
+++ b/man/color.map.5 |
61 |
@@ -46,6 +46,9 @@ Defines color used for satisfied blockers. |
62 |
\fBPKG_MERGE\fR = \fI"darkgreen"\fR |
63 |
Defines color used for packages planned to be merged. |
64 |
.TP |
65 |
+\fBPKG_MERGE_USER_SET\fR = \fI"darkgreen"\fR |
66 |
+Defines color used for packages planned to be merged from a user defined set. |
67 |
+.TP |
68 |
\fBPKG_MERGE_SYSTEM\fR = \fI"darkgreen"\fR |
69 |
Defines color used for system packages planned to be merged. |
70 |
.TP |
71 |
@@ -55,6 +58,10 @@ Defines color used for world packages planned to be merged. |
72 |
\fBPKG_BINARY_MERGE\fR = \fI"purple"\fR |
73 |
Defines color used for packages planned to be merged using a binary package. |
74 |
.TP |
75 |
+\fBPKG_BINARY_MERGE_USER_SET\fR = \fI"purple"\fR |
76 |
+Defines color used for packages planned to be merged using a binary package |
77 |
+from a user defined set. |
78 |
+.TP |
79 |
\fBPKG_BINARY_MERGE_SYSTEM\fR = \fI"purple"\fR |
80 |
Defines color used for system packages planned to be merged using a binary |
81 |
package. |
82 |
@@ -66,6 +73,10 @@ package. |
83 |
\fBPKG_NOMERGE\fR = \fI"darkblue"\fR |
84 |
Defines color used for packages not planned to be merged. |
85 |
.TP |
86 |
+\fBPKG_NOMERGE_USER_SET\fR = \fI"darkblue"\fR |
87 |
+Defines color used for packages not planned to be merged from a user defined |
88 |
+set. |
89 |
+.TP |
90 |
\fBPKG_NOMERGE_SYSTEM\fR = \fI"darkblue"\fR |
91 |
Defines color used for system packages not planned to be merged. |
92 |
.TP |
93 |
diff --git a/man/portage.5 b/man/portage.5 |
94 |
index 7c2a8f7..3cc1f07 100644 |
95 |
--- a/man/portage.5 |
96 |
+++ b/man/portage.5 |
97 |
@@ -1114,6 +1114,7 @@ class = portage.sets.files.StaticFileSet |
98 |
multiset = true |
99 |
directory = %(PORTAGE_CONFIGROOT)setc/portage/sets |
100 |
world-candidate = True |
101 |
+user-set = True |
102 |
|
103 |
[module-rebuild] |
104 |
class = portage.sets.dbapi.OwnerSet |
105 |
diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py |
106 |
index 400617d..89670d3 100644 |
107 |
--- a/pym/_emerge/resolver/output.py |
108 |
+++ b/pym/_emerge/resolver/output.py |
109 |
@@ -271,6 +271,8 @@ class Display(object): |
110 |
return colorize("PKG_BINARY_MERGE_SYSTEM", pkg_str) |
111 |
elif pkg_info.world: |
112 |
return colorize("PKG_BINARY_MERGE_WORLD", pkg_str) |
113 |
+ elif pkg_info.user_set: |
114 |
+ return colorize("PKG_BINARY_MERGE_USER_SET", pkg_str) |
115 |
else: |
116 |
return colorize("PKG_BINARY_MERGE", pkg_str) |
117 |
else: |
118 |
@@ -278,6 +280,8 @@ class Display(object): |
119 |
return colorize("PKG_MERGE_SYSTEM", pkg_str) |
120 |
elif pkg_info.world: |
121 |
return colorize("PKG_MERGE_WORLD", pkg_str) |
122 |
+ elif pkg_info.user_set: |
123 |
+ return colorize("PKG_MERGE_USER_SET", pkg_str) |
124 |
else: |
125 |
return colorize("PKG_MERGE", pkg_str) |
126 |
elif pkg_info.operation == "uninstall": |
127 |
@@ -287,6 +291,8 @@ class Display(object): |
128 |
return colorize("PKG_NOMERGE_SYSTEM", pkg_str) |
129 |
elif pkg_info.world: |
130 |
return colorize("PKG_NOMERGE_WORLD", pkg_str) |
131 |
+ elif pkg_info.user_set: |
132 |
+ return colorize("PKG_NOMERGE_USER_SET", pkg_str) |
133 |
else: |
134 |
return colorize("PKG_NOMERGE", pkg_str) |
135 |
|
136 |
@@ -699,18 +705,21 @@ class Display(object): |
137 |
return |
138 |
|
139 |
|
140 |
- def check_system_world(self, pkg): |
141 |
- """Checks for any occurances of the package in the system or world sets |
142 |
+ def check_sets(self, pkg): |
143 |
+ """Checks for any occurances of the package in the portage sets |
144 |
|
145 |
@param pkg: _emerge.Package.Package instance |
146 |
- @rtype system and world booleans |
147 |
+ @rtype user_set, system, and world booleans |
148 |
""" |
149 |
root_config = self.conf.roots[pkg.root] |
150 |
system_set = root_config.sets["system"] |
151 |
world_set = root_config.sets["selected"] |
152 |
- system = False |
153 |
- world = False |
154 |
+ user_set = None |
155 |
+ system = None |
156 |
+ world = None |
157 |
try: |
158 |
+ user_set = self.conf.user_sets.findAtomForPackage( |
159 |
+ pkg, modified_use=self.conf.pkg_use_enabled(pkg)) |
160 |
system = system_set.findAtomForPackage( |
161 |
pkg, modified_use=self.conf.pkg_use_enabled(pkg)) |
162 |
world = world_set.findAtomForPackage( |
163 |
@@ -726,7 +735,7 @@ class Display(object): |
164 |
except InvalidDependString: |
165 |
# This is reported elsewhere if relevant. |
166 |
pass |
167 |
- return system, world |
168 |
+ return user_set, system, world |
169 |
|
170 |
|
171 |
@staticmethod |
172 |
@@ -863,8 +872,8 @@ class Display(object): |
173 |
self.oldlp = self.conf.columnwidth - 30 |
174 |
self.newlp = self.oldlp - 30 |
175 |
pkg_info.oldbest = self.convert_myoldbest(pkg, pkg_info) |
176 |
- pkg_info.system, pkg_info.world = \ |
177 |
- self.check_system_world(pkg) |
178 |
+ pkg_info.user_set, pkg_info.system, pkg_info.world = \ |
179 |
+ self.check_sets(pkg) |
180 |
if 'interactive' in pkg.properties and \ |
181 |
pkg.operation == 'merge': |
182 |
pkg_info.attr_display.interactive = True |
183 |
diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py |
184 |
index 70f7bc0..47de8c6 100644 |
185 |
--- a/pym/_emerge/resolver/output_helpers.py |
186 |
+++ b/pym/_emerge/resolver/output_helpers.py |
187 |
@@ -213,6 +213,13 @@ class _DisplayConfig(object): |
188 |
self.running_root = frozen_config._running_root |
189 |
self.roots = frozen_config.roots |
190 |
|
191 |
+ # Merge all user sets into the self.user_sets InternalPackageSet |
192 |
+ self.user_sets = InternalPackageSet() |
193 |
+ target_root_sets = self.roots[self.target_root].sets |
194 |
+ for set_name in target_root_sets: |
195 |
+ if target_root_sets[set_name].user_set: |
196 |
+ self.user_sets.update(target_root_sets[set_name].getAtoms()) |
197 |
+ |
198 |
self.blocker_parents = dynamic_config._blocker_parents |
199 |
self.reinstall_nodes = dynamic_config._reinstall_nodes |
200 |
self.digraph = dynamic_config.digraph |
201 |
@@ -596,7 +603,8 @@ class PkgInfo(object): |
202 |
__slots__ = ("attr_display", "built", "cp", |
203 |
"ebuild_path", "fetch_symbol", "merge", |
204 |
"oldbest", "oldbest_list", "operation", "ordered", "previous_pkg", |
205 |
- "repo_name", "repo_path_real", "slot", "sub_slot", "system", "use", "ver", "world") |
206 |
+ "repo_name", "repo_path_real", "user_set", "slot", "sub_slot", |
207 |
+ "system", "use", "ver", "world") |
208 |
|
209 |
|
210 |
def __init__(self): |
211 |
@@ -612,12 +620,13 @@ class PkgInfo(object): |
212 |
self.previous_pkg = None |
213 |
self.repo_path_real = '' |
214 |
self.repo_name = '' |
215 |
+ self.user_set = None |
216 |
self.slot = '' |
217 |
self.sub_slot = '' |
218 |
- self.system = False |
219 |
+ self.system = None |
220 |
self.use = '' |
221 |
self.ver = '' |
222 |
- self.world = False |
223 |
+ self.world = None |
224 |
self.attr_display = PkgAttrDisplay() |
225 |
|
226 |
class PkgAttrDisplay(SlotObject): |
227 |
diff --git a/pym/portage/_sets/__init__.py b/pym/portage/_sets/__init__.py |
228 |
index 91f9dd1..3203521 100644 |
229 |
--- a/pym/portage/_sets/__init__.py |
230 |
+++ b/pym/portage/_sets/__init__.py |
231 |
@@ -148,6 +148,7 @@ class SetConfig(object): |
232 |
parser.set("usersets", "multiset", "true") |
233 |
parser.set("usersets", "directory", "%(PORTAGE_CONFIGROOT)setc/portage/sets") |
234 |
parser.set("usersets", "world-candidate", "true") |
235 |
+ parser.set("usersets", "user-set", "true") |
236 |
|
237 |
parser.remove_section("live-rebuild") |
238 |
parser.add_section("live-rebuild") |
239 |
@@ -176,6 +177,7 @@ class SetConfig(object): |
240 |
if not setname in self.psets: |
241 |
options["name"] = setname |
242 |
options["world-candidate"] = "False" |
243 |
+ options["user-set"] = "False" |
244 |
|
245 |
# for the unlikely case that there is already a section with the requested setname |
246 |
import random |
247 |
@@ -244,6 +246,9 @@ class SetConfig(object): |
248 |
if parser.has_option(sname, "world-candidate") and \ |
249 |
parser.getboolean(sname, "world-candidate"): |
250 |
newsets[x].world_candidate = True |
251 |
+ if parser.has_option(sname, "user-set") and \ |
252 |
+ parser.getboolean(sname, "user-set"): |
253 |
+ newsets[x].user_set = True |
254 |
self.psets.update(newsets) |
255 |
else: |
256 |
self.errors.append(_("Section '%(section)s' is configured as multiset, but '%(class)s' " |
257 |
@@ -263,6 +268,9 @@ class SetConfig(object): |
258 |
if parser.has_option(sname, "world-candidate") and \ |
259 |
parser.getboolean(sname, "world-candidate"): |
260 |
self.psets[setname].world_candidate = True |
261 |
+ if parser.has_option(sname, "user-set") and \ |
262 |
+ parser.getboolean(sname, "user-set"): |
263 |
+ self.psets[setname].user_set = True |
264 |
except SetConfigError as e: |
265 |
self.errors.append(_("Configuration error in section '%s': %s") % (sname, str(e))) |
266 |
continue |
267 |
diff --git a/pym/portage/_sets/base.py b/pym/portage/_sets/base.py |
268 |
index ee20d36..7be9aab 100644 |
269 |
--- a/pym/portage/_sets/base.py |
270 |
+++ b/pym/portage/_sets/base.py |
271 |
@@ -28,6 +28,7 @@ class PackageSet(object): |
272 |
self.errors = [] |
273 |
self._nonatoms = set() |
274 |
self.world_candidate = False |
275 |
+ self.user_set = False |
276 |
self._allow_wildcard = allow_wildcard |
277 |
self._allow_repo = allow_repo |
278 |
|
279 |
diff --git a/pym/portage/output.py b/pym/portage/output.py |
280 |
index bb7542b..80c67e8 100644 |
281 |
--- a/pym/portage/output.py |
282 |
+++ b/pym/portage/output.py |
283 |
@@ -128,24 +128,27 @@ _styles["HILITE"] = ( "teal", ) |
284 |
_styles["BRACKET"] = ( "blue", ) |
285 |
|
286 |
# Portage functions |
287 |
-_styles["INFORM"] = ( "darkgreen", ) |
288 |
-_styles["UNMERGE_WARN"] = ( "red", ) |
289 |
-_styles["SECURITY_WARN"] = ( "red", ) |
290 |
-_styles["MERGE_LIST_PROGRESS"] = ( "yellow", ) |
291 |
-_styles["PKG_BLOCKER"] = ( "red", ) |
292 |
-_styles["PKG_BLOCKER_SATISFIED"] = ( "darkblue", ) |
293 |
-_styles["PKG_MERGE"] = ( "darkgreen", ) |
294 |
-_styles["PKG_MERGE_SYSTEM"] = ( "darkgreen", ) |
295 |
-_styles["PKG_MERGE_WORLD"] = ( "green", ) |
296 |
-_styles["PKG_BINARY_MERGE"] = ( "purple", ) |
297 |
-_styles["PKG_BINARY_MERGE_SYSTEM"] = ( "purple", ) |
298 |
-_styles["PKG_BINARY_MERGE_WORLD"] = ( "fuchsia", ) |
299 |
-_styles["PKG_UNINSTALL"] = ( "red", ) |
300 |
-_styles["PKG_NOMERGE"] = ( "darkblue", ) |
301 |
-_styles["PKG_NOMERGE_SYSTEM"] = ( "darkblue", ) |
302 |
-_styles["PKG_NOMERGE_WORLD"] = ( "blue", ) |
303 |
-_styles["PROMPT_CHOICE_DEFAULT"] = ( "green", ) |
304 |
-_styles["PROMPT_CHOICE_OTHER"] = ( "red", ) |
305 |
+_styles["INFORM"] = ( "darkgreen", ) |
306 |
+_styles["UNMERGE_WARN"] = ( "red", ) |
307 |
+_styles["SECURITY_WARN"] = ( "red", ) |
308 |
+_styles["MERGE_LIST_PROGRESS"] = ( "yellow", ) |
309 |
+_styles["PKG_BLOCKER"] = ( "red", ) |
310 |
+_styles["PKG_BLOCKER_SATISFIED"] = ( "darkblue", ) |
311 |
+_styles["PKG_MERGE"] = ( "darkgreen", ) |
312 |
+_styles["PKG_MERGE_USER_SET"] = ( "darkgreen", ) |
313 |
+_styles["PKG_MERGE_SYSTEM"] = ( "darkgreen", ) |
314 |
+_styles["PKG_MERGE_WORLD"] = ( "green", ) |
315 |
+_styles["PKG_BINARY_MERGE"] = ( "purple", ) |
316 |
+_styles["PKG_BINARY_MERGE_USER_SET"] = ( "purple", ) |
317 |
+_styles["PKG_BINARY_MERGE_SYSTEM"] = ( "purple", ) |
318 |
+_styles["PKG_BINARY_MERGE_WORLD"] = ( "fuchsia", ) |
319 |
+_styles["PKG_UNINSTALL"] = ( "red", ) |
320 |
+_styles["PKG_NOMERGE"] = ( "darkblue", ) |
321 |
+_styles["PKG_NOMERGE_USER_SET"] = ( "darkblue", ) |
322 |
+_styles["PKG_NOMERGE_SYSTEM"] = ( "darkblue", ) |
323 |
+_styles["PKG_NOMERGE_WORLD"] = ( "blue", ) |
324 |
+_styles["PROMPT_CHOICE_DEFAULT"] = ( "green", ) |
325 |
+_styles["PROMPT_CHOICE_OTHER"] = ( "red", ) |
326 |
|
327 |
def _parse_color_map(config_root='/', onerror=None): |
328 |
""" |
329 |
-- |
330 |
2.7.3 |