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

Replies