Gentoo Archives: gentoo-portage-dev

From: Adam Mills <adam@×××××××.info>
To: gentoo-portage-dev@l.g.o
Cc: Adam Mills <adam@×××××××.info>
Subject: [gentoo-portage-dev] [PATCH v2] Colorize packages in user sets (bug 577720)
Date: Tue, 29 Mar 2016 15:34:46
Message-Id: 1459265621-26648-1-git-send-email-adam@armills.info
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 v2] Simplification of check_sets ref Alexander Berntsen's feedback
10
11 man/color.map.5 | 11 ++++++++++
12 pym/_emerge/resolver/output.py | 28 +++++++++++++++++-------
13 pym/_emerge/resolver/output_helpers.py | 8 ++++---
14 pym/portage/_sets/base.py | 3 +++
15 pym/portage/_sets/files.py | 3 +++
16 pym/portage/output.py | 39 ++++++++++++++++++----------------
17 6 files changed, 63 insertions(+), 29 deletions(-)
18
19 diff --git a/man/color.map.5 b/man/color.map.5
20 index 5543628..39f23f7 100644
21 --- a/man/color.map.5
22 +++ b/man/color.map.5
23 @@ -46,6 +46,9 @@ Defines color used for satisfied blockers.
24 \fBPKG_MERGE\fR = \fI"darkgreen"\fR
25 Defines color used for packages planned to be merged.
26 .TP
27 +\fBPKG_MERGE_USER_SET\fR = \fI"darkgreen"\fR
28 +Defines color used for packages planned to be merged from a user defined set.
29 +.TP
30 \fBPKG_MERGE_SYSTEM\fR = \fI"darkgreen"\fR
31 Defines color used for system packages planned to be merged.
32 .TP
33 @@ -55,6 +58,10 @@ Defines color used for world packages planned to be merged.
34 \fBPKG_BINARY_MERGE\fR = \fI"purple"\fR
35 Defines color used for packages planned to be merged using a binary package.
36 .TP
37 +\fBPKG_BINARY_MERGE_USER_SET\fR = \fI"purple"\fR
38 +Defines color used for packages planned to be merged using a binary package
39 +from a user defined set.
40 +.TP
41 \fBPKG_BINARY_MERGE_SYSTEM\fR = \fI"purple"\fR
42 Defines color used for system packages planned to be merged using a binary
43 package.
44 @@ -66,6 +73,10 @@ package.
45 \fBPKG_NOMERGE\fR = \fI"darkblue"\fR
46 Defines color used for packages not planned to be merged.
47 .TP
48 +\fBPKG_NOMERGE_USER_SET\fR = \fI"darkblue"\fR
49 +Defines color used for packages not planned to be merged from a user defined
50 +set.
51 +.TP
52 \fBPKG_NOMERGE_SYSTEM\fR = \fI"darkblue"\fR
53 Defines color used for system packages not planned to be merged.
54 .TP
55 diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
56 index 400617d..36e4020 100644
57 --- a/pym/_emerge/resolver/output.py
58 +++ b/pym/_emerge/resolver/output.py
59 @@ -271,6 +271,8 @@ class Display(object):
60 return colorize("PKG_BINARY_MERGE_SYSTEM", pkg_str)
61 elif pkg_info.world:
62 return colorize("PKG_BINARY_MERGE_WORLD", pkg_str)
63 + elif pkg_info.user_set:
64 + return colorize("PKG_BINARY_MERGE_USER_SET", pkg_str)
65 else:
66 return colorize("PKG_BINARY_MERGE", pkg_str)
67 else:
68 @@ -278,6 +280,8 @@ class Display(object):
69 return colorize("PKG_MERGE_SYSTEM", pkg_str)
70 elif pkg_info.world:
71 return colorize("PKG_MERGE_WORLD", pkg_str)
72 + elif pkg_info.user_set:
73 + return colorize("PKG_MERGE_USER_SET", pkg_str)
74 else:
75 return colorize("PKG_MERGE", pkg_str)
76 elif pkg_info.operation == "uninstall":
77 @@ -287,6 +291,8 @@ class Display(object):
78 return colorize("PKG_NOMERGE_SYSTEM", pkg_str)
79 elif pkg_info.world:
80 return colorize("PKG_NOMERGE_WORLD", pkg_str)
81 + elif pkg_info.user_set:
82 + return colorize("PKG_NOMERGE_USER_SET", pkg_str)
83 else:
84 return colorize("PKG_NOMERGE", pkg_str)
85
86 @@ -699,22 +705,28 @@ class Display(object):
87 return
88
89
90 - def check_system_world(self, pkg):
91 - """Checks for any occurances of the package in the system or world sets
92 + def check_sets(self, pkg):
93 + """Checks for any occurances of the package in the portage sets
94
95 @param pkg: _emerge.Package.Package instance
96 - @rtype system and world booleans
97 + @rtype user_set, system, and world booleans
98 """
99 root_config = self.conf.roots[pkg.root]
100 system_set = root_config.sets["system"]
101 world_set = root_config.sets["selected"]
102 - system = False
103 - world = False
104 + user_set = None
105 + system = None
106 + world = None
107 try:
108 system = system_set.findAtomForPackage(
109 pkg, modified_use=self.conf.pkg_use_enabled(pkg))
110 world = world_set.findAtomForPackage(
111 pkg, modified_use=self.conf.pkg_use_enabled(pkg))
112 + for set_name in root_config.sets:
113 + if root_config.sets[set_name].isUserSet():
114 + user_set = root_config.sets[set_name].findAtomForPackage(
115 + pkg, modified_use=self.conf.pkg_use_enabled(pkg))
116 + if user_set: break
117 if not (self.conf.oneshot or world) and \
118 pkg.root == self.conf.target_root and \
119 self.conf.favorites.findAtomForPackage(
120 @@ -726,7 +738,7 @@ class Display(object):
121 except InvalidDependString:
122 # This is reported elsewhere if relevant.
123 pass
124 - return system, world
125 + return user_set, system, world
126
127
128 @staticmethod
129 @@ -863,8 +875,8 @@ class Display(object):
130 self.oldlp = self.conf.columnwidth - 30
131 self.newlp = self.oldlp - 30
132 pkg_info.oldbest = self.convert_myoldbest(pkg, pkg_info)
133 - pkg_info.system, pkg_info.world = \
134 - self.check_system_world(pkg)
135 + pkg_info.user_set, pkg_info.system, pkg_info.world = \
136 + self.check_sets(pkg)
137 if 'interactive' in pkg.properties and \
138 pkg.operation == 'merge':
139 pkg_info.attr_display.interactive = True
140 diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py
141 index 70f7bc0..801774f 100644
142 --- a/pym/_emerge/resolver/output_helpers.py
143 +++ b/pym/_emerge/resolver/output_helpers.py
144 @@ -596,7 +596,8 @@ class PkgInfo(object):
145 __slots__ = ("attr_display", "built", "cp",
146 "ebuild_path", "fetch_symbol", "merge",
147 "oldbest", "oldbest_list", "operation", "ordered", "previous_pkg",
148 - "repo_name", "repo_path_real", "slot", "sub_slot", "system", "use", "ver", "world")
149 + "repo_name", "repo_path_real", "user_set", "slot", "sub_slot",
150 + "system", "use", "ver", "world")
151
152
153 def __init__(self):
154 @@ -612,12 +613,13 @@ class PkgInfo(object):
155 self.previous_pkg = None
156 self.repo_path_real = ''
157 self.repo_name = ''
158 + self.user_set = None
159 self.slot = ''
160 self.sub_slot = ''
161 - self.system = False
162 + self.system = None
163 self.use = ''
164 self.ver = ''
165 - self.world = False
166 + self.world = None
167 self.attr_display = PkgAttrDisplay()
168
169 class PkgAttrDisplay(SlotObject):
170 diff --git a/pym/portage/_sets/base.py b/pym/portage/_sets/base.py
171 index ee20d36..a73fb93 100644
172 --- a/pym/portage/_sets/base.py
173 +++ b/pym/portage/_sets/base.py
174 @@ -173,6 +173,9 @@ class PackageSet(object):
175 cpv_slot_list):
176 yield atom
177
178 + def isUserSet(self):
179 + return False
180 +
181 class EditablePackageSet(PackageSet):
182
183 def __init__(self, allow_wildcard=False, allow_repo=False):
184 diff --git a/pym/portage/_sets/files.py b/pym/portage/_sets/files.py
185 index e045701..7f844ef 100644
186 --- a/pym/portage/_sets/files.py
187 +++ b/pym/portage/_sets/files.py
188 @@ -174,6 +174,9 @@ class StaticFileSet(EditablePackageSet):
189 greedy=greedy, dbapi=trees["vartree"].dbapi)
190 return rValue
191 multiBuilder = classmethod(multiBuilder)
192 +
193 + def isUserSet(self):
194 + return True
195
196 class ConfigFileSet(PackageSet):
197 def __init__(self, filename):
198 diff --git a/pym/portage/output.py b/pym/portage/output.py
199 index bb7542b..80c67e8 100644
200 --- a/pym/portage/output.py
201 +++ b/pym/portage/output.py
202 @@ -128,24 +128,27 @@ _styles["HILITE"] = ( "teal", )
203 _styles["BRACKET"] = ( "blue", )
204
205 # Portage functions
206 -_styles["INFORM"] = ( "darkgreen", )
207 -_styles["UNMERGE_WARN"] = ( "red", )
208 -_styles["SECURITY_WARN"] = ( "red", )
209 -_styles["MERGE_LIST_PROGRESS"] = ( "yellow", )
210 -_styles["PKG_BLOCKER"] = ( "red", )
211 -_styles["PKG_BLOCKER_SATISFIED"] = ( "darkblue", )
212 -_styles["PKG_MERGE"] = ( "darkgreen", )
213 -_styles["PKG_MERGE_SYSTEM"] = ( "darkgreen", )
214 -_styles["PKG_MERGE_WORLD"] = ( "green", )
215 -_styles["PKG_BINARY_MERGE"] = ( "purple", )
216 -_styles["PKG_BINARY_MERGE_SYSTEM"] = ( "purple", )
217 -_styles["PKG_BINARY_MERGE_WORLD"] = ( "fuchsia", )
218 -_styles["PKG_UNINSTALL"] = ( "red", )
219 -_styles["PKG_NOMERGE"] = ( "darkblue", )
220 -_styles["PKG_NOMERGE_SYSTEM"] = ( "darkblue", )
221 -_styles["PKG_NOMERGE_WORLD"] = ( "blue", )
222 -_styles["PROMPT_CHOICE_DEFAULT"] = ( "green", )
223 -_styles["PROMPT_CHOICE_OTHER"] = ( "red", )
224 +_styles["INFORM"] = ( "darkgreen", )
225 +_styles["UNMERGE_WARN"] = ( "red", )
226 +_styles["SECURITY_WARN"] = ( "red", )
227 +_styles["MERGE_LIST_PROGRESS"] = ( "yellow", )
228 +_styles["PKG_BLOCKER"] = ( "red", )
229 +_styles["PKG_BLOCKER_SATISFIED"] = ( "darkblue", )
230 +_styles["PKG_MERGE"] = ( "darkgreen", )
231 +_styles["PKG_MERGE_USER_SET"] = ( "darkgreen", )
232 +_styles["PKG_MERGE_SYSTEM"] = ( "darkgreen", )
233 +_styles["PKG_MERGE_WORLD"] = ( "green", )
234 +_styles["PKG_BINARY_MERGE"] = ( "purple", )
235 +_styles["PKG_BINARY_MERGE_USER_SET"] = ( "purple", )
236 +_styles["PKG_BINARY_MERGE_SYSTEM"] = ( "purple", )
237 +_styles["PKG_BINARY_MERGE_WORLD"] = ( "fuchsia", )
238 +_styles["PKG_UNINSTALL"] = ( "red", )
239 +_styles["PKG_NOMERGE"] = ( "darkblue", )
240 +_styles["PKG_NOMERGE_USER_SET"] = ( "darkblue", )
241 +_styles["PKG_NOMERGE_SYSTEM"] = ( "darkblue", )
242 +_styles["PKG_NOMERGE_WORLD"] = ( "blue", )
243 +_styles["PROMPT_CHOICE_DEFAULT"] = ( "green", )
244 +_styles["PROMPT_CHOICE_OTHER"] = ( "red", )
245
246 def _parse_color_map(config_root='/', onerror=None):
247 """
248 --
249 2.7.3

Replies