Gentoo Archives: gentoo-portage-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-portage-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-portage-dev] [PATCH 4/4] Use ">>>>" and "!!!!" for output prefixes
Date: Tue, 28 Sep 2021 14:20:24
Message-Id: 20210928142004.1375262-5-mgorny@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH 0/4] Output rewrite for better clarify and greppability by "Michał Górny"
1 Replace ">>>" with ">>>>" and "!!!" with "!!!!" output prefixes in order
2 to align Portage's messages with the new log output.
3
4 Signed-off-by: Michał Górny <mgorny@g.o>
5 ---
6 bin/clean_locks | 2 +-
7 bin/dohtml.py | 2 +-
8 bin/doins.py | 2 +-
9 bin/ebuild | 8 +-
10 bin/ebuild-helpers/dobin | 2 +-
11 bin/ebuild-helpers/dodoc | 2 +-
12 bin/ebuild-helpers/doexe | 2 +-
13 bin/ebuild-helpers/doinfo | 2 +-
14 bin/ebuild-helpers/dolib | 2 +-
15 bin/ebuild-helpers/doman | 2 +-
16 bin/ebuild-helpers/domo | 2 +-
17 bin/ebuild-helpers/dosbin | 2 +-
18 bin/ebuild-helpers/dosed | 4 +-
19 bin/ebuild-helpers/keepdir | 2 +-
20 bin/ebuild-helpers/newins | 4 +-
21 bin/env-update | 2 +-
22 bin/fixpackages | 4 +-
23 bin/glsa-check | 14 +-
24 bin/install.py | 2 +-
25 bin/misc-functions.sh | 22 +--
26 bin/phase-functions.sh | 64 ++++-----
27 bin/phase-helpers.sh | 18 +--
28 bin/portageq | 6 +-
29 cnf/repo.postsync.d/example | 4 +-
30 lib/_emerge/Binpkg.py | 10 +-
31 lib/_emerge/BinpkgExtractorAsync.py | 4 +-
32 lib/_emerge/BinpkgVerifier.py | 12 +-
33 lib/_emerge/BlockerCache.py | 2 +-
34 lib/_emerge/BlockerDB.py | 2 +-
35 lib/_emerge/EbuildBuild.py | 2 +-
36 lib/_emerge/EbuildIpcDaemon.py | 2 +-
37 lib/_emerge/EbuildPhase.py | 2 +-
38 lib/_emerge/JobStatusDisplay.py | 2 +-
39 lib/_emerge/MergeListItem.py | 2 +-
40 lib/_emerge/PackageUninstall.py | 6 +-
41 lib/_emerge/Scheduler.py | 20 +--
42 lib/_emerge/SpawnProcess.py | 2 +-
43 lib/_emerge/SubProcess.py | 2 +-
44 lib/_emerge/actions.py | 126 ++++++++++--------
45 lib/_emerge/countdown.py | 4 +-
46 lib/_emerge/depgraph.py | 121 +++++++++--------
47 lib/_emerge/main.py | 6 +-
48 lib/_emerge/post_emerge.py | 4 +-
49 lib/_emerge/resolver/output_helpers.py | 4 +-
50 lib/_emerge/resolver/slot_collision.py | 16 +--
51 lib/_emerge/show_invalid_depstring_notice.py | 2 +-
52 lib/_emerge/unmerge.py | 44 +++---
53 lib/portage/__init__.py | 24 ++--
54 lib/portage/_selinux.py | 4 +-
55 lib/portage/_sets/shell.py | 2 +-
56 lib/portage/binrepo/config.py | 4 +-
57 lib/portage/data.py | 2 +-
58 lib/portage/dbapi/__init__.py | 2 +-
59 lib/portage/dbapi/bintree.py | 45 ++++---
60 lib/portage/dbapi/porttree.py | 12 +-
61 lib/portage/dbapi/vartree.py | 94 ++++++-------
62 lib/portage/dep/__init__.py | 48 +++----
63 lib/portage/elog/__init__.py | 2 +-
64 lib/portage/elog/messages.py | 5 +-
65 lib/portage/elog/mod_custom.py | 4 +-
66 lib/portage/elog/mod_mail_summary.py | 2 +-
67 lib/portage/elog/mod_save_summary.py | 2 +-
68 lib/portage/emaint/modules/binhost/binhost.py | 3 +-
69 lib/portage/env/loaders.py | 14 +-
70 lib/portage/getbinpkg.py | 32 ++---
71 lib/portage/locks.py | 2 +-
72 lib/portage/mail.py | 12 +-
73 lib/portage/manifest.py | 2 +-
74 lib/portage/metadata.py | 6 +-
75 lib/portage/news.py | 6 +-
76 .../ebuild/_config/LocationsManager.py | 10 +-
77 .../_parallel_manifest/ManifestProcess.py | 6 +-
78 .../_parallel_manifest/ManifestScheduler.py | 2 +-
79 .../ebuild/_parallel_manifest/ManifestTask.py | 6 +-
80 lib/portage/package/ebuild/config.py | 61 ++++-----
81 .../ebuild/deprecated_profile_check.py | 12 +-
82 lib/portage/package/ebuild/digestcheck.py | 24 ++--
83 lib/portage/package/ebuild/digestgen.py | 20 +--
84 lib/portage/package/ebuild/doebuild.py | 36 ++---
85 lib/portage/package/ebuild/fetch.py | 126 +++++++++---------
86 .../package/ebuild/prepare_build_dirs.py | 25 ++--
87 lib/portage/repository/config.py | 31 ++---
88 lib/portage/sync/config_checks.py | 12 +-
89 lib/portage/sync/controller.py | 6 +-
90 lib/portage/sync/modules/cvs/__init__.py | 2 +-
91 lib/portage/sync/modules/cvs/cvs.py | 4 +-
92 lib/portage/sync/modules/git/__init__.py | 4 +-
93 lib/portage/sync/modules/git/git.py | 14 +-
94 .../sync/modules/mercurial/mercurial.py | 4 +-
95 lib/portage/sync/modules/rsync/rsync.py | 60 ++++-----
96 lib/portage/sync/modules/svn/svn.py | 6 +-
97 lib/portage/sync/modules/webrsync/webrsync.py | 10 +-
98 lib/portage/sync/old_tree_timestamp.py | 2 +-
99 lib/portage/sync/syncbase.py | 6 +-
100 lib/portage/tests/resolver/test_autounmask.py | 6 +-
101 .../resolver/test_autounmask_use_breakage.py | 6 +-
102 ...est_slot_conflict_unsatisfied_deep_deps.py | 12 +-
103 lib/portage/update.py | 4 +-
104 lib/portage/util/__init__.py | 30 ++---
105 .../util/_dyn_libs/PreservedLibsRegistry.py | 4 +-
106 .../util/_dyn_libs/display_preserved_libs.py | 4 +-
107 lib/portage/util/env_update.py | 8 +-
108 lib/portage/util/locale.py | 2 +-
109 lib/portage/util/movefile.py | 40 +++---
110 lib/portage/util/mtimedb.py | 5 +-
111 lib/portage/util/writeable_check.py | 4 +-
112 lib/portage/versions.py | 20 +--
113 lib/portage/xml/metadata.py | 18 +--
114 misc/emerge-delta-webrsync | 8 +-
115 repoman/lib/repoman/__init__.py | 12 +-
116 repoman/lib/repoman/actions.py | 24 ++--
117 repoman/lib/repoman/gpg.py | 2 +-
118 .../lib/repoman/modules/commit/manifest.py | 4 +-
119 repoman/lib/repoman/modules/vcs/cvs/status.py | 6 +-
120 .../lib/repoman/modules/vcs/git/changes.py | 2 +-
121 repoman/lib/repoman/modules/vcs/svn/status.py | 6 +-
122 repoman/lib/repoman/scanner.py | 4 +-
123 117 files changed, 834 insertions(+), 788 deletions(-)
124
125 diff --git a/bin/clean_locks b/bin/clean_locks
126 index e5765fd7e..14f3c857c 100755
127 --- a/bin/clean_locks
128 +++ b/bin/clean_locks
129 @@ -36,7 +36,7 @@ for x in sys.argv[1:]:
130
131 except OSError as e:
132 if e.errno in (errno.ENOENT, errno.ENOTDIR):
133 - print("!!! %s is not a directory or does not exist" % x)
134 + print("!!!! %s is not a directory or does not exist" % x)
135 else:
136 raise
137 sys.exit(e.errno)
138 diff --git a/bin/dohtml.py b/bin/dohtml.py
139 index c7235ff4e..344ab7579 100755
140 --- a/bin/dohtml.py
141 +++ b/bin/dohtml.py
142 @@ -96,7 +96,7 @@ def install(basename, dirname, options, prefix=""):
143 ).rstrip(os.sep)
144
145 if not os.path.exists(fullpath):
146 - sys.stderr.write("!!! dohtml: %s does not exist\n" % fullpath)
147 + sys.stderr.write("!!!! dohtml: %s does not exist\n" % fullpath)
148 return False
149 elif os.path.isfile(fullpath):
150 ext = os.path.splitext(basename)[1][1:]
151 diff --git a/bin/doins.py b/bin/doins.py
152 index 97b0e2e2f..0f4c0fd3c 100644
153 --- a/bin/doins.py
154 +++ b/bin/doins.py
155 @@ -34,7 +34,7 @@ def _warn(helper, msg):
156 helper: helper executable name.
157 msg: Message to be output.
158 """
159 - print("!!! %s: %s\n" % (helper, msg), file=sys.stderr)
160 + print("!!!! %s: %s\n" % (helper, msg), file=sys.stderr)
161
162
163 def _parse_group(group):
164 diff --git a/bin/ebuild b/bin/ebuild
165 index 0a2b13a13..2cf004671 100755
166 --- a/bin/ebuild
167 +++ b/bin/ebuild
168 @@ -328,7 +328,7 @@ def stale_env_warning():
169 (tmpsettings["PF"], )
170 msg = textwrap.wrap(msg, 70)
171 for x in msg:
172 - portage.writemsg(">>> %s\n" % x)
173 + portage.writemsg(">>>> %s\n" % x)
174
175 if ebuild_changed:
176 open(os.path.join(tmpsettings['PORTAGE_BUILDDIR'],
177 @@ -359,13 +359,13 @@ for arg in pargs:
178 msg = textwrap.wrap(str(e), 70)
179 del e
180 for x in msg:
181 - portage.writemsg("!!! %s\n" % x, noiselevel=-1)
182 + portage.writemsg("!!!! %s\n" % x, noiselevel=-1)
183 a = 1
184 except PortagePackageException as e:
185 - portage.writemsg("!!! %s\n" % (e,), noiselevel=-1)
186 + portage.writemsg("!!!! %s\n" % (e,), noiselevel=-1)
187 a = 1
188 except PermissionDenied as e:
189 - portage.writemsg("!!! Permission Denied: %s\n" % (e,), noiselevel=-1)
190 + portage.writemsg("!!!! Permission Denied: %s\n" % (e,), noiselevel=-1)
191 a = 1
192 if a == None:
193 print("Could not run the required binary?")
194 diff --git a/bin/ebuild-helpers/dobin b/bin/ebuild-helpers/dobin
195 index 975067fb1..aaa3f2588 100755
196 --- a/bin/ebuild-helpers/dobin
197 +++ b/bin/ebuild-helpers/dobin
198 @@ -31,7 +31,7 @@ for x in "$@" ; do
199 if [[ -e ${x} ]] ; then
200 install -m0755 -o ${PORTAGE_INST_UID:-0} -g ${PORTAGE_INST_GID:-0} "${x}" "${ED%/}/${_E_DESTTREE_#/}/bin"
201 else
202 - echo "!!! ${0##*/}: $x does not exist" 1>&2
203 + echo "!!!! ${0##*/}: $x does not exist" 1>&2
204 false
205 fi
206 ((ret|=$?))
207 diff --git a/bin/ebuild-helpers/dodoc b/bin/ebuild-helpers/dodoc
208 index e83091045..30bc3ab0e 100755
209 --- a/bin/ebuild-helpers/dodoc
210 +++ b/bin/ebuild-helpers/dodoc
211 @@ -29,7 +29,7 @@ for x in "$@" ; do
212 elif [ -s "${x}" ] ; then
213 install -m0644 "${x}" "${dir}" || { ((ret|=1)); continue; }
214 elif [ ! -e "${x}" ] ; then
215 - echo "!!! ${0##*/}: $x does not exist" 1>&2
216 + echo "!!!! ${0##*/}: $x does not exist" 1>&2
217 ((ret|=1))
218 fi
219 done
220 diff --git a/bin/ebuild-helpers/doexe b/bin/ebuild-helpers/doexe
221 index 152c13bf6..27b4acc19 100755
222 --- a/bin/ebuild-helpers/doexe
223 +++ b/bin/ebuild-helpers/doexe
224 @@ -34,7 +34,7 @@ for x in "$@" ; do
225 if [ -e "$mysrc" ] ; then
226 install ${EXEOPTIONS} "$mysrc" "${ED%/}/${_E_EXEDESTTREE_#/}"
227 else
228 - echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
229 + echo "!!!! ${0##*/}: $mysrc does not exist" 1>&2
230 false
231 fi
232 ((ret|=$?))
233 diff --git a/bin/ebuild-helpers/doinfo b/bin/ebuild-helpers/doinfo
234 index 30a38e055..515cdc3bb 100755
235 --- a/bin/ebuild-helpers/doinfo
236 +++ b/bin/ebuild-helpers/doinfo
237 @@ -21,7 +21,7 @@ install -m0644 "$@" "${ED%/}/usr/share/info"
238 rval=$?
239 if [ $rval -ne 0 ] ; then
240 for x in "$@" ; do
241 - [ -e "$x" ] || echo "!!! ${0##*/}: $x does not exist" 1>&2
242 + [ -e "$x" ] || echo "!!!! ${0##*/}: $x does not exist" 1>&2
243 done
244 __helpers_die "${0##*/} failed"
245 fi
246 diff --git a/bin/ebuild-helpers/dolib b/bin/ebuild-helpers/dolib
247 index bd8eebca7..8975611c6 100755
248 --- a/bin/ebuild-helpers/dolib
249 +++ b/bin/ebuild-helpers/dolib
250 @@ -50,7 +50,7 @@ for x in "$@" ; do
251 ln -s "$(readlink "${x}")" "${libdir}/${x##*/}"
252 fi
253 else
254 - echo "!!! ${0##*/}: ${x} does not exist" 1>&2
255 + echo "!!!! ${0##*/}: ${x} does not exist" 1>&2
256 false
257 fi
258 ((ret|=$?))
259 diff --git a/bin/ebuild-helpers/doman b/bin/ebuild-helpers/doman
260 index 9cfc89df0..1b56e08dd 100755
261 --- a/bin/ebuild-helpers/doman
262 +++ b/bin/ebuild-helpers/doman
263 @@ -56,7 +56,7 @@ for x in "$@" ; do
264 install -m0644 "${x}" "${ED%/}/usr/share/man/${mandir}/${name}"
265 ((ret|=$?))
266 elif [[ ! -e ${x} ]] ; then
267 - echo "!!! ${0##*/}: $x does not exist" 1>&2
268 + echo "!!!! ${0##*/}: $x does not exist" 1>&2
269 ((ret|=1))
270 fi
271 else
272 diff --git a/bin/ebuild-helpers/domo b/bin/ebuild-helpers/domo
273 index 2e95eb751..416e15ae6 100755
274 --- a/bin/ebuild-helpers/domo
275 +++ b/bin/ebuild-helpers/domo
276 @@ -42,7 +42,7 @@ for x in "$@" ; do
277 fi
278 install -m0644 "${x}" "${mydir}/${MOPREFIX}.mo"
279 else
280 - echo "!!! ${0##*/}: $x does not exist" 1>&2
281 + echo "!!!! ${0##*/}: $x does not exist" 1>&2
282 false
283 fi
284 ((ret|=$?))
285 diff --git a/bin/ebuild-helpers/dosbin b/bin/ebuild-helpers/dosbin
286 index ac0ab37ca..db99ab17a 100755
287 --- a/bin/ebuild-helpers/dosbin
288 +++ b/bin/ebuild-helpers/dosbin
289 @@ -31,7 +31,7 @@ for x in "$@" ; do
290 if [[ -e ${x} ]] ; then
291 install -m0755 -o ${PORTAGE_INST_UID:-0} -g ${PORTAGE_INST_GID:-0} "${x}" "${ED%/}/${_E_DESTTREE_#/}/sbin"
292 else
293 - echo "!!! ${0##*/}: ${x} does not exist" 1>&2
294 + echo "!!!! ${0##*/}: ${x} does not exist" 1>&2
295 false
296 fi
297 ((ret|=$?))
298 diff --git a/bin/ebuild-helpers/dosed b/bin/ebuild-helpers/dosed
299 index 37c8a29d3..9c75cbf64 100755
300 --- a/bin/ebuild-helpers/dosed
301 +++ b/bin/ebuild-helpers/dosed
302 @@ -10,7 +10,7 @@ if ! ___eapi_has_dosed; then
303 fi
304
305 if [[ $# -lt 1 ]] ; then
306 - echo "!!! ${0##*/}: at least one argument needed" >&2
307 + echo "!!!! ${0##*/}: at least one argument needed" >&2
308 exit 1
309 fi
310
311 @@ -39,7 +39,7 @@ for x in "$@" ; do
312 done
313
314 if [ $file_found = 0 ] ; then
315 - echo "!!! ${0##*/}: $y does not exist" 1>&2
316 + echo "!!!! ${0##*/}: $y does not exist" 1>&2
317 ((ret|=1))
318 fi
319
320 diff --git a/bin/ebuild-helpers/keepdir b/bin/ebuild-helpers/keepdir
321 index a3c0c151c..0ea23ad1b 100755
322 --- a/bin/ebuild-helpers/keepdir
323 +++ b/bin/ebuild-helpers/keepdir
324 @@ -13,7 +13,7 @@ ret=$?
325
326 for x in "$@"; do
327 >> "${ED%/}/${x#/}/.keep_${CATEGORY}_${PN}-${SLOT%/*}" || \
328 - { echo "!!! ${0##*/}: cannot write .keep in ${ED%/}/${x#/}" 1>&2; ret=1; }
329 + { echo "!!!! ${0##*/}: cannot write .keep in ${ED%/}/${x#/}" 1>&2; ret=1; }
330 done
331
332 [[ ${ret} -ne 0 ]] && __helpers_die "${0##*/} failed"
333 diff --git a/bin/ebuild-helpers/newins b/bin/ebuild-helpers/newins
334 index 30e54b7e5..dcb779913 100755
335 --- a/bin/ebuild-helpers/newins
336 +++ b/bin/ebuild-helpers/newins
337 @@ -24,14 +24,14 @@ trap 'rm -rf "${TMP}"' EXIT
338
339 if [[ ${stdin} ]] ; then
340 if [[ -t 0 ]] ; then
341 - __helpers_die "!!! ${helper}: Input is from a terminal"
342 + __helpers_die "!!!! ${helper}: Input is from a terminal"
343 exit 1
344 fi
345 cat > "${TMP}/$2"
346 ret=$?
347 else
348 if [[ ! -e $1 ]] ; then
349 - __helpers_die "!!! ${helper}: $1 does not exist"
350 + __helpers_die "!!!! ${helper}: $1 does not exist"
351 exit 1
352 fi
353
354 diff --git a/bin/env-update b/bin/env-update
355 index 6571b0011..4fe916a6a 100755
356 --- a/bin/env-update
357 +++ b/bin/env-update
358 @@ -20,7 +20,7 @@ if "--no-ldconfig" in sys.argv:
359 sys.argv.pop(sys.argv.index("--no-ldconfig"))
360
361 if len(sys.argv) > 1:
362 - print("!!! Invalid command line options!\n")
363 + print("!!!! Invalid command line options!\n")
364 usage(1)
365
366 from os import path as osp
367 diff --git a/bin/fixpackages b/bin/fixpackages
368 index e56d26ec1..b4d6f6a1d 100755
369 --- a/bin/fixpackages
370 +++ b/bin/fixpackages
371 @@ -38,9 +38,9 @@ if mysettings['ROOT'] != "/":
372 try:
373 os.nice(int(mysettings.get("PORTAGE_NICENESS", "0")))
374 except (OSError, ValueError) as e:
375 - portage.writemsg("!!! Failed to change nice value to '%s'\n" % \
376 + portage.writemsg("!!!! Failed to change nice value to '%s'\n" % \
377 mysettings["PORTAGE_NICENESS"])
378 - portage.writemsg("!!! %s\n" % str(e))
379 + portage.writemsg("!!!! %s\n" % str(e))
380 del e
381
382 _global_updates(mytrees, mtimedb["updates"], if_mtime_changed=False)
383 diff --git a/bin/glsa-check b/bin/glsa-check
384 index c8610f7df..db6d95894 100755
385 --- a/bin/glsa-check
386 +++ b/bin/glsa-check
387 @@ -233,16 +233,16 @@ if mode in ["dump", "fix", "inject", "pretend"]:
388 sys.stdout.write("Fixing GLSA "+myid+"\n")
389 if not myglsa.isVulnerable():
390 if not quiet:
391 - sys.stdout.write(">>> no vulnerable packages installed\n")
392 + sys.stdout.write(">>>> no vulnerable packages installed\n")
393 else:
394 if quiet:
395 sys.stdout.write("Fixing GLSA "+myid+"\n")
396 mergelist = myglsa.getMergeList(least_change=least_change)
397 if mergelist == []:
398 - sys.stdout.write(">>> cannot fix GLSA, no unaffected packages available\n")
399 + sys.stdout.write(">>>> cannot fix GLSA, no unaffected packages available\n")
400 sys.exit(2)
401 for pkg in mergelist:
402 - sys.stdout.write(">>> merging "+pkg+"\n")
403 + sys.stdout.write(">>>> merging "+pkg+"\n")
404 # using emerge for the actual merging as it contains the dependency
405 # code and we want to be consistent in behaviour. Also this functionality
406 # will be integrated in emerge later, so it shouldn't hurt much.
407 @@ -262,7 +262,7 @@ if mode in ["dump", "fix", "inject", "pretend"]:
408 sys.stdout.write("Checking GLSA "+myid+"\n")
409 if not myglsa.isVulnerable():
410 if not quiet:
411 - sys.stdout.write(">>> no vulnerable packages installed\n")
412 + sys.stdout.write(">>>> no vulnerable packages installed\n")
413 else:
414 if quiet:
415 sys.stdout.write("Checking GLSA "+myid+"\n")
416 @@ -272,19 +272,19 @@ if mode in ["dump", "fix", "inject", "pretend"]:
417
418 # first, extract the atoms that cannot be upgraded (where key == "")
419 no_upgrades = []
420 - sys.stdout.write(">>> The following updates will be performed for this GLSA:\n")
421 + sys.stdout.write(">>>> The following updates will be performed for this GLSA:\n")
422 if "" in mergedict:
423 no_upgrades = mergedict[""]
424 del mergedict[""]
425
426 # see if anything is left that can be upgraded
427 if mergedict:
428 - sys.stdout.write(">>> Updates that will be performed:\n")
429 + sys.stdout.write(">>>> Updates that will be performed:\n")
430 for (upd, vuln) in mergedict.items():
431 sys.stdout.write(" " + green(upd) + " (vulnerable: " + red(", ".join(vuln)) + ")\n")
432
433 if no_upgrades:
434 - sys.stdout.write(">>> No upgrade path exists for these packages:\n")
435 + sys.stdout.write(">>>> No upgrade path exists for these packages:\n")
436 sys.stdout.write(" " + red(", ".join(no_upgrades)) + "\n")
437 sys.stdout.write("\n")
438 elif mode == "inject":
439 diff --git a/bin/install.py b/bin/install.py
440 index d6faeb6a4..e53200c42 100755
441 --- a/bin/install.py
442 +++ b/bin/install.py
443 @@ -173,7 +173,7 @@ def main(args):
444 returncode = copy_xattrs(opts, files)
445 if returncode != os.EX_OK:
446 portage.util.writemsg(
447 - "!!! install: copy_xattrs failed with the "
448 + "!!!! install: copy_xattrs failed with the "
449 "following arguments: %s\n"
450 % " ".join(portage._shell_quote(x) for x in args),
451 noiselevel=-1,
452 diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
453 index e4defa550..8a4c913b5 100755
454 --- a/bin/misc-functions.sh
455 +++ b/bin/misc-functions.sh
456 @@ -255,8 +255,8 @@ install_qa_check() {
457
458 __dyn_instprep() {
459 if [[ -e ${PORTAGE_BUILDDIR}/.instprepped ]] ; then
460 - __vecho ">>> It appears that '$PF' is already instprepped; skipping."
461 - __vecho ">>> Remove '${PORTAGE_BUILDDIR}/.instprepped' to force instprep."
462 + __vecho ">>>> It appears that '$PF' is already instprepped; skipping."
463 + __vecho ">>>> Remove '${PORTAGE_BUILDDIR}/.instprepped' to force instprep."
464 return 0
465 fi
466
467 @@ -398,11 +398,11 @@ preinst_sfperms() {
468 find "${ED}" -type f -perm -4000 -print0 | \
469 while read -r -d $'\0' i ; do
470 if [ -n "$(find "$i" -perm -2000)" ] ; then
471 - ebegin ">>> SetUID and SetGID: [chmod o-r] ${i#${ED%/}}"
472 + ebegin ">>>> SetUID and SetGID: [chmod o-r] ${i#${ED%/}}"
473 chmod o-r "$i"
474 eend $?
475 else
476 - ebegin ">>> SetUID: [chmod go-r] ${i#${ED%/}}"
477 + ebegin ">>>> SetUID: [chmod go-r] ${i#${ED%/}}"
478 chmod go-r "$i"
479 eend $?
480 fi
481 @@ -414,7 +414,7 @@ preinst_sfperms() {
482 # by the SetUID check above.
483 true
484 else
485 - ebegin ">>> SetGID: [chmod o-r] ${i#${ED%/}}"
486 + ebegin ">>>> SetGID: [chmod o-r] ${i#${ED%/}}"
487 chmod o-r "$i"
488 eend $?
489 fi
490 @@ -440,19 +440,19 @@ preinst_suid_scan() {
491 # to files outside of the sandbox, but this
492 # can easly be bypassed using the addwrite() function
493 addwrite "${sfconf}"
494 - __vecho ">>> Performing suid scan in ${ED}"
495 + __vecho ">>>> Performing suid scan in ${ED}"
496 for i in $(find "${ED}" -type f \( -perm -4000 -o -perm -2000 \) ); do
497 if [ -s "${sfconf}" ]; then
498 install_path=${i#${ED%/}}
499 if grep -q "^${install_path}\$" "${sfconf}" ; then
500 __vecho "- ${install_path} is an approved suid file"
501 else
502 - __vecho ">>> Removing sbit on non registered ${install_path}"
503 + __vecho ">>>> Removing sbit on non registered ${install_path}"
504 LC_ALL=C sleep 1.5
505 ls_ret=$(ls -ldh "${i}")
506 chmod ugo-s "${i}"
507 grep "^#${install_path}$" "${sfconf}" > /dev/null || {
508 - __vecho ">>> Appending commented out entry to ${sfconf} for ${PF}"
509 + __vecho ">>>> Appending commented out entry to ${sfconf} for ${PF}"
510 echo "## ${ls_ret%${ED%/}*}${install_path}" >> "${sfconf}"
511 echo "#${install_path}" >> "${sfconf}"
512 # no delwrite() eh?
513 @@ -476,7 +476,7 @@ preinst_selinux_labels() {
514 # only attempt to label if setfiles is executable
515 # and 'context' is available on selinuxfs.
516 if [ -f /sys/fs/selinux/context -a -x /usr/sbin/setfiles -a -x /usr/sbin/selinuxconfig ]; then
517 - __vecho ">>> Setting SELinux security labels"
518 + __vecho ">>>> Setting SELinux security labels"
519 (
520 eval "$(/usr/sbin/selinuxconfig)" || \
521 die "Failed to determine SELinux policy paths.";
522 @@ -488,7 +488,7 @@ preinst_selinux_labels() {
523 else
524 # nonfatal, since merging can happen outside a SE kernel
525 # like during a recovery situation
526 - __vecho "!!! Unable to set SELinux security labels"
527 + __vecho "!!!! Unable to set SELinux security labels"
528 fi
529 fi
530 }
531 @@ -534,7 +534,7 @@ __dyn_package() {
532 fi
533 [ -n "${md5_hash}" ] && \
534 echo ${md5_hash} > "${PORTAGE_BUILDDIR}"/build-info/BINPKGMD5
535 - __vecho ">>> Done."
536 + __vecho ">>>> Done."
537
538 cd "${PORTAGE_BUILDDIR}"
539 >> "$PORTAGE_BUILDDIR/.packaged" || \
540 diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
541 index 9a4c97b16..967af68b5 100644
542 --- a/bin/phase-functions.sh
543 +++ b/bin/phase-functions.sh
544 @@ -219,8 +219,8 @@ __ebuild_phase_with_hooks() {
545
546 __dyn_pretend() {
547 if [[ -e $PORTAGE_BUILDDIR/.pretended ]] ; then
548 - __vecho ">>> It appears that '$PF' is already pretended; skipping."
549 - __vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
550 + __vecho ">>>> It appears that '$PF' is already pretended; skipping."
551 + __vecho ">>>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
552 return 0
553 fi
554 __ebuild_phase pre_pkg_pretend
555 @@ -232,8 +232,8 @@ __dyn_pretend() {
556
557 __dyn_setup() {
558 if [[ -e $PORTAGE_BUILDDIR/.setuped ]] ; then
559 - __vecho ">>> It appears that '$PF' is already setup; skipping."
560 - __vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
561 + __vecho ">>>> It appears that '$PF' is already setup; skipping."
562 + __vecho ">>>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
563 return 0
564 fi
565 __ebuild_phase pre_pkg_setup
566 @@ -245,7 +245,7 @@ __dyn_setup() {
567
568 __dyn_unpack() {
569 if [[ -f ${PORTAGE_BUILDDIR}/.unpacked ]] ; then
570 - __vecho ">>> WORKDIR is up-to-date, keeping..."
571 + __vecho ">>>> WORKDIR is up-to-date, keeping..."
572 return 0
573 fi
574 if [ ! -d "${WORKDIR}" ]; then
575 @@ -253,11 +253,11 @@ __dyn_unpack() {
576 fi
577 cd "${WORKDIR}" || die "Directory change failed: \`cd '${WORKDIR}'\`"
578 __ebuild_phase pre_src_unpack
579 - __vecho ">>> Unpacking source..."
580 + __vecho ">>>> Unpacking source..."
581 __ebuild_phase src_unpack
582 >> "$PORTAGE_BUILDDIR/.unpacked" || \
583 die "Failed to create $PORTAGE_BUILDDIR/.unpacked"
584 - __vecho ">>> Source unpacked in ${WORKDIR}"
585 + __vecho ">>>> Source unpacked in ${WORKDIR}"
586 __ebuild_phase post_src_unpack
587 }
588
589 @@ -370,8 +370,8 @@ __has_phase_defined_up_to() {
590 __dyn_prepare() {
591
592 if [[ -e $PORTAGE_BUILDDIR/.prepared ]] ; then
593 - __vecho ">>> It appears that '$PF' is already prepared; skipping."
594 - __vecho ">>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
595 + __vecho ">>>> It appears that '$PF' is already prepared; skipping."
596 + __vecho ">>>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
597 return 0
598 fi
599
600 @@ -388,7 +388,7 @@ __dyn_prepare() {
601 trap __abort_prepare SIGINT SIGQUIT
602
603 __ebuild_phase pre_src_prepare
604 - __vecho ">>> Preparing source in $PWD ..."
605 + __vecho ">>>> Preparing source in $PWD ..."
606 __ebuild_phase src_prepare
607
608 # keep path in eapply_user in sync!
609 @@ -398,7 +398,7 @@ __dyn_prepare() {
610
611 >> "$PORTAGE_BUILDDIR/.prepared" || \
612 die "Failed to create $PORTAGE_BUILDDIR/.prepared"
613 - __vecho ">>> Source prepared."
614 + __vecho ">>>> Source prepared."
615 __ebuild_phase post_src_prepare
616
617 trap - SIGINT SIGQUIT
618 @@ -407,8 +407,8 @@ __dyn_prepare() {
619 __dyn_configure() {
620
621 if [[ -e $PORTAGE_BUILDDIR/.configured ]] ; then
622 - __vecho ">>> It appears that '$PF' is already configured; skipping."
623 - __vecho ">>> Remove '$PORTAGE_BUILDDIR/.configured' to force configuration."
624 + __vecho ">>>> It appears that '$PF' is already configured; skipping."
625 + __vecho ">>>> Remove '$PORTAGE_BUILDDIR/.configured' to force configuration."
626 return 0
627 fi
628
629 @@ -426,11 +426,11 @@ __dyn_configure() {
630
631 __ebuild_phase pre_src_configure
632
633 - __vecho ">>> Configuring source in $PWD ..."
634 + __vecho ">>>> Configuring source in $PWD ..."
635 __ebuild_phase src_configure
636 >> "$PORTAGE_BUILDDIR/.configured" || \
637 die "Failed to create $PORTAGE_BUILDDIR/.configured"
638 - __vecho ">>> Source configured."
639 + __vecho ">>>> Source configured."
640
641 __ebuild_phase post_src_configure
642
643 @@ -440,8 +440,8 @@ __dyn_configure() {
644 __dyn_compile() {
645
646 if [[ -e $PORTAGE_BUILDDIR/.compiled ]] ; then
647 - __vecho ">>> It appears that '${PF}' is already compiled; skipping."
648 - __vecho ">>> Remove '$PORTAGE_BUILDDIR/.compiled' to force compilation."
649 + __vecho ">>>> It appears that '${PF}' is already compiled; skipping."
650 + __vecho ">>>> Remove '$PORTAGE_BUILDDIR/.compiled' to force compilation."
651 return 0
652 fi
653
654 @@ -459,11 +459,11 @@ __dyn_compile() {
655
656 __ebuild_phase pre_src_compile
657
658 - __vecho ">>> Compiling source in $PWD ..."
659 + __vecho ">>>> Compiling source in $PWD ..."
660 __ebuild_phase src_compile
661 >> "$PORTAGE_BUILDDIR/.compiled" || \
662 die "Failed to create $PORTAGE_BUILDDIR/.compiled"
663 - __vecho ">>> Source compiled."
664 + __vecho ">>>> Source compiled."
665
666 __ebuild_phase post_src_compile
667
668 @@ -473,8 +473,8 @@ __dyn_compile() {
669 __dyn_test() {
670
671 if [[ -e $PORTAGE_BUILDDIR/.tested ]] ; then
672 - __vecho ">>> It appears that ${PN} has already been tested; skipping."
673 - __vecho ">>> Remove '${PORTAGE_BUILDDIR}/.tested' to force test."
674 + __vecho ">>>> It appears that ${PN} has already been tested; skipping."
675 + __vecho ">>>> Remove '${PORTAGE_BUILDDIR}/.tested' to force test."
676 return
677 fi
678
679 @@ -494,20 +494,20 @@ __dyn_test() {
680 ! { has test_network ${PORTAGE_PROPERTIES} && has network ${ALLOW_TEST}; }
681 then
682 einfo "Skipping make test/check due to ebuild restriction."
683 - __vecho ">>> Test phase [disabled because of RESTRICT=test]: ${CATEGORY}/${PF}"
684 + __vecho ">>>> Test phase [disabled because of RESTRICT=test]: ${CATEGORY}/${PF}"
685
686 # If ${EBUILD_FORCE_TEST} == 1 and FEATURES came from ${T}/environment
687 # then it might not have FEATURES=test like it's supposed to here.
688 elif [[ ${EBUILD_FORCE_TEST} != 1 ]] && ! has test ${FEATURES} ; then
689 - __vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
690 + __vecho ">>>> Test phase [not enabled]: ${CATEGORY}/${PF}"
691 else
692 local save_sp=${SANDBOX_PREDICT}
693 addpredict /
694 __ebuild_phase pre_src_test
695
696 - __vecho ">>> Test phase: ${CATEGORY}/${PF}"
697 + __vecho ">>>> Test phase: ${CATEGORY}/${PF}"
698 __ebuild_phase src_test
699 - __vecho ">>> Completed testing ${CATEGORY}/${PF}"
700 + __vecho ">>>> Completed testing ${CATEGORY}/${PF}"
701
702 >> "$PORTAGE_BUILDDIR/.tested" || \
703 die "Failed to create $PORTAGE_BUILDDIR/.tested"
704 @@ -523,8 +523,8 @@ __dyn_install() {
705 if has noauto $FEATURES ; then
706 rm -f "${PORTAGE_BUILDDIR}/.installed"
707 elif [[ -e $PORTAGE_BUILDDIR/.installed ]] ; then
708 - __vecho ">>> It appears that '${PF}' is already installed; skipping."
709 - __vecho ">>> Remove '${PORTAGE_BUILDDIR}/.installed' to force install."
710 + __vecho ">>>> It appears that '${PF}' is already installed; skipping."
711 + __vecho ">>>> Remove '${PORTAGE_BUILDDIR}/.installed' to force install."
712 return 0
713 fi
714 trap "__abort_install" SIGINT SIGQUIT
715 @@ -578,7 +578,7 @@ __dyn_install() {
716 fi
717
718 __vecho
719 - __vecho ">>> Install ${CATEGORY}/${PF} into ${D}"
720 + __vecho ">>>> Install ${CATEGORY}/${PF} into ${D}"
721 #our custom version of libtool uses $S and $D to fix
722 #invalid paths in .la files
723 export S D
724 @@ -599,7 +599,7 @@ __dyn_install() {
725 __ebuild_phase src_install
726 >> "$PORTAGE_BUILDDIR/.installed" || \
727 die "Failed to create $PORTAGE_BUILDDIR/.installed"
728 - __vecho ">>> Completed installing ${CATEGORY}/${PF} into ${D}"
729 + __vecho ">>>> Completed installing ${CATEGORY}/${PF} into ${D}"
730 __vecho
731 __ebuild_phase post_src_install
732
733 @@ -1031,11 +1031,11 @@ __ebuild_main() {
734 if has noauto $FEATURES && \
735 [[ ! -f $PORTAGE_BUILDDIR/.unpacked ]] ; then
736 echo
737 - echo "!!! We apparently haven't unpacked..." \
738 + echo "!!!! We apparently haven't unpacked..." \
739 "This is probably not what you"
740 - echo "!!! want to be doing... You are using" \
741 + echo "!!!! want to be doing... You are using" \
742 "FEATURES=noauto so I'll assume"
743 - echo "!!! that you know what you are doing..." \
744 + echo "!!!! that you know what you are doing..." \
745 "You have 5 seconds to abort..."
746 echo
747
748 diff --git a/bin/phase-helpers.sh b/bin/phase-helpers.sh
749 index 94f4f24f2..3ccb58a9b 100644
750 --- a/bin/phase-helpers.sh
751 +++ b/bin/phase-helpers.sh
752 @@ -269,8 +269,8 @@ use() {
753
754 use_with() {
755 if [ -z "$1" ]; then
756 - echo "!!! use_with() called without a parameter." >&2
757 - echo "!!! use_with <USEFLAG> [<flagname> [value]]" >&2
758 + echo "!!!! use_with() called without a parameter." >&2
759 + echo "!!!! use_with <USEFLAG> [<flagname> [value]]" >&2
760 return 1
761 fi
762
763 @@ -291,8 +291,8 @@ use_with() {
764
765 use_enable() {
766 if [ -z "$1" ]; then
767 - echo "!!! use_enable() called without a parameter." >&2
768 - echo "!!! use_enable <USEFLAG> [<flagname> [value]]" >&2
769 + echo "!!!! use_enable() called without a parameter." >&2
770 + echo "!!!! use_enable <USEFLAG> [<flagname> [value]]" >&2
771 return 1
772 fi
773
774 @@ -321,7 +321,7 @@ unpack() {
775 [ -z "$*" ] && die "Nothing passed to the 'unpack' command"
776
777 for x in "$@"; do
778 - __vecho ">>> Unpacking ${x} to ${PWD}"
779 + __vecho ">>>> Unpacking ${x} to ${PWD}"
780 suffix=${x##*.}
781 suffix_insensitive=$(LC_ALL=C tr "[:upper:]" "[:lower:]" <<< "${suffix}")
782 y=${x%.*}
783 @@ -703,8 +703,8 @@ econf() {
784
785 if [ -s config.log ]; then
786 echo
787 - echo "!!! Please attach the following file when seeking support:"
788 - echo "!!! ${PWD}/config.log"
789 + echo "!!!! Please attach the following file when seeking support:"
790 + echo "!!!! ${PWD}/config.log"
791 fi
792 # econf dies unconditionally in EAPIs 0 to 3
793 ___eapi_helpers_can_die || die "econf failed"
794 @@ -1188,8 +1188,8 @@ if ___eapi_has_in_iuse; then
795 local use=${1}
796
797 if [[ -z "${use}" ]]; then
798 - echo "!!! in_iuse() called without a parameter." >&2
799 - echo "!!! in_iuse <USEFLAG>" >&2
800 + echo "!!!! in_iuse() called without a parameter." >&2
801 + echo "!!!! in_iuse <USEFLAG>" >&2
802 die "in_iuse() called without a parameter"
803 fi
804
805 diff --git a/bin/portageq b/bin/portageq
806 index d3cb9f140..9f94d001b 100755
807 --- a/bin/portageq
808 +++ b/bin/portageq
809 @@ -1304,9 +1304,9 @@ def add_pquery_arguments(parser):
810
811
812 def usage(argv):
813 - print(">>> Portage information query tool")
814 - print(">>> %s" % portage.VERSION)
815 - print(">>> Usage: portageq <command> [<option> ...]")
816 + print(">>>> Portage information query tool")
817 + print(">>>> %s" % portage.VERSION)
818 + print(">>>> Usage: portageq <command> [<option> ...]")
819 print("")
820 print("Available commands:")
821
822 diff --git a/cnf/repo.postsync.d/example b/cnf/repo.postsync.d/example
823 index 72d91a60e..ac29cd416 100644
824 --- a/cnf/repo.postsync.d/example
825 +++ b/cnf/repo.postsync.d/example
826 @@ -41,7 +41,7 @@ if [ -n "${repository_name}" ]; then
827 if [ "${repository_name}" != "gentoo" ]; then
828 if ! egencache --update --repo="${repository_name}" --jobs=4
829 then
830 - echo "!!! egencache failed!"
831 + echo "!!!! egencache failed!"
832 ret=1
833 fi
834 fi
835 @@ -55,7 +55,7 @@ if [ -n "${repository_name}" ] && ! [ -e "${repository_path}/metadata/pkg_desc_i
836 # does not interfere with repository verification.
837 if ! egencache --update-pkg-desc-index --external-cache-only --repo="${repository_name}" ${PORTAGE_VERBOSE+--verbose}
838 then
839 - echo "!!! egencache failed!"
840 + echo "!!!! egencache failed!"
841 ret=1
842 fi
843 fi
844 diff --git a/lib/_emerge/Binpkg.py b/lib/_emerge/Binpkg.py
845 index c7dde69bd..ae83b6b75 100644
846 --- a/lib/_emerge/Binpkg.py
847 +++ b/lib/_emerge/Binpkg.py
848 @@ -323,7 +323,7 @@ class Binpkg(CompositeTask):
849
850 # This initializes PORTAGE_LOG_FILE.
851 portage.prepare_build_dirs(self.settings["ROOT"], self.settings, 1)
852 - self._writemsg_level(">>> Extracting info\n")
853 + self._writemsg_level(">>>> Extracting info\n")
854
855 await self._bintree.dbapi.unpack_metadata(
856 self.settings, infloc, loop=self.scheduler
857 @@ -404,7 +404,7 @@ class Binpkg(CompositeTask):
858 self._async_unlock_builddir(returncode=self.returncode)
859 return
860
861 - self._writemsg_level(">>> Extracting %s\n" % self.pkg.cpv)
862 + self._writemsg_level(">>>> Extracting %s\n" % self.pkg.cpv)
863 self._start_task(
864 AsyncTaskFuture(
865 future=self._bintree.dbapi.unpack_contents(
866 @@ -418,7 +418,7 @@ class Binpkg(CompositeTask):
867 if self._default_exit(unpack_contents) != os.EX_OK:
868 unpack_contents.future.result()
869 self._writemsg_level(
870 - "!!! Error Extracting '%s'\n" % self._pkg_path,
871 + "!!!! Error Extracting '%s'\n" % self._pkg_path,
872 noiselevel=-1,
873 level=logging.ERROR,
874 )
875 @@ -462,13 +462,13 @@ class Binpkg(CompositeTask):
876 scheduler=self.scheduler,
877 logfile=self.settings.get("PORTAGE_LOG_FILE"),
878 )
879 - self._writemsg_level(">>> Adjusting Prefix to %s\n" % self.settings["EPREFIX"])
880 + self._writemsg_level(">>>> Adjusting Prefix to %s\n" % self.settings["EPREFIX"])
881 self._start_task(chpathtool, self._chpathtool_exit)
882
883 def _chpathtool_exit(self, chpathtool):
884 if self._final_exit(chpathtool) != os.EX_OK:
885 self._writemsg_level(
886 - "!!! Error Adjusting Prefix to %s\n" % (self.settings["EPREFIX"],),
887 + "!!!! Error Adjusting Prefix to %s\n" % (self.settings["EPREFIX"],),
888 noiselevel=-1,
889 level=logging.ERROR,
890 )
891 diff --git a/lib/_emerge/BinpkgExtractorAsync.py b/lib/_emerge/BinpkgExtractorAsync.py
892 index a0380a0a4..9219882fe 100644
893 --- a/lib/_emerge/BinpkgExtractorAsync.py
894 +++ b/lib/_emerge/BinpkgExtractorAsync.py
895 @@ -58,7 +58,7 @@ class BinpkgExtractorAsync(SpawnProcess):
896 decomp_cmd = None
897 if decomp_cmd is None:
898 self.scheduler.output(
899 - "!!! %s\n"
900 + "!!!! %s\n"
901 % _("File compression header unrecognized: %s")
902 % self.pkg_path,
903 log_path=self.logfile,
904 @@ -90,7 +90,7 @@ class BinpkgExtractorAsync(SpawnProcess):
905 if find_binary(decompression_binary) is None:
906 missing_package = decomp.get("package")
907 self.scheduler.output(
908 - "!!! %s\n"
909 + "!!!! %s\n"
910 % _(
911 "File compression unsupported %s.\n Command was: %s.\n Maybe missing package: %s"
912 )
913 diff --git a/lib/_emerge/BinpkgVerifier.py b/lib/_emerge/BinpkgVerifier.py
914 index 6d8efb9c4..7a0a40028 100644
915 --- a/lib/_emerge/BinpkgVerifier.py
916 +++ b/lib/_emerge/BinpkgVerifier.py
917 @@ -43,7 +43,7 @@ class BinpkgVerifier(CompositeTask):
918 if e.errno not in (errno.ENOENT, errno.ESTALE):
919 raise
920 self.scheduler.output(
921 - ("!!! Fetching Binary failed " "for '%s'\n") % self.pkg.cpv,
922 + ("!!!! Fetching Binary failed " "for '%s'\n") % self.pkg.cpv,
923 log_path=self.logfile,
924 background=self.background,
925 )
926 @@ -127,11 +127,11 @@ class BinpkgVerifier(CompositeTask):
927
928 self.scheduler.output(
929 (
930 - "\n!!! Digest verification failed:\n"
931 - "!!! %s\n"
932 - "!!! Reason: Failed on %s verification\n"
933 - "!!! Got: %s\n"
934 - "!!! Expected: %s\n"
935 + "\n!!!! Digest verification failed:\n"
936 + "!!!! %s\n"
937 + "!!!! Reason: Failed on %s verification\n"
938 + "!!!! Got: %s\n"
939 + "!!!! Expected: %s\n"
940 "File renamed to '%s'\n"
941 )
942 % (self._pkg_path, name, value, expected, temp_filename),
943 diff --git a/lib/_emerge/BlockerCache.py b/lib/_emerge/BlockerCache.py
944 index 5aad581f4..581b98a38 100644
945 --- a/lib/_emerge/BlockerCache.py
946 +++ b/lib/_emerge/BlockerCache.py
947 @@ -62,7 +62,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
948 pass
949 else:
950 writemsg(
951 - "!!! Error loading '%s': %s\n" % (self._cache_filename, str(e)),
952 + "!!!! Error loading '%s': %s\n" % (self._cache_filename, str(e)),
953 noiselevel=-1,
954 )
955 del e
956 diff --git a/lib/_emerge/BlockerDB.py b/lib/_emerge/BlockerDB.py
957 index b6542157c..e778fdd90 100644
958 --- a/lib/_emerge/BlockerDB.py
959 +++ b/lib/_emerge/BlockerDB.py
960 @@ -71,7 +71,7 @@ class BlockerDB:
961 inst_pkg.root, portage.VDB_PATH, inst_pkg.category, inst_pkg.pf
962 )
963 portage.writemsg(
964 - "!!! %s/*DEPEND: %s\n" % (pkg_location, atoms), noiselevel=-1
965 + "!!!! %s/*DEPEND: %s\n" % (pkg_location, atoms), noiselevel=-1
966 )
967 continue
968
969 diff --git a/lib/_emerge/EbuildBuild.py b/lib/_emerge/EbuildBuild.py
970 index 2ed16537b..caf2e45d2 100644
971 --- a/lib/_emerge/EbuildBuild.py
972 +++ b/lib/_emerge/EbuildBuild.py
973 @@ -447,7 +447,7 @@ class EbuildBuild(CompositeTask):
974 return
975
976 if self._issyspkg:
977 - msg = ">>> This is a system package, " + "let's pack a rescue tarball.\n"
978 + msg = ">>>> This is a system package, " + "let's pack a rescue tarball.\n"
979 self.scheduler.output(msg, log_path=self.settings.get("PORTAGE_LOG_FILE"))
980
981 binpkg_tasks = TaskSequence()
982 diff --git a/lib/_emerge/EbuildIpcDaemon.py b/lib/_emerge/EbuildIpcDaemon.py
983 index ee6fd7658..c32465ad4 100644
984 --- a/lib/_emerge/EbuildIpcDaemon.py
985 +++ b/lib/_emerge/EbuildIpcDaemon.py
986 @@ -111,7 +111,7 @@ class EbuildIpcDaemon(FifoIpcDaemon):
987 # This probably means that the client has been killed,
988 # which causes open to fail with ENXIO.
989 writemsg_level(
990 - "!!! EbuildIpcDaemon %s: %s\n" % (_("failed to send reply"), e),
991 + "!!!! EbuildIpcDaemon %s: %s\n" % (_("failed to send reply"), e),
992 level=logging.ERROR,
993 noiselevel=-1,
994 )
995 diff --git a/lib/_emerge/EbuildPhase.py b/lib/_emerge/EbuildPhase.py
996 index 12326fffd..9f28bdfef 100644
997 --- a/lib/_emerge/EbuildPhase.py
998 +++ b/lib/_emerge/EbuildPhase.py
999 @@ -387,7 +387,7 @@ class EbuildPhase(CompositeTask):
1000 self._append_temp_log(post_phase.logfile, log_path)
1001
1002 if self._final_exit(post_phase) != os.EX_OK:
1003 - writemsg("!!! post %s failed; exiting.\n" % self.phase, noiselevel=-1)
1004 + writemsg("!!!! post %s failed; exiting.\n" % self.phase, noiselevel=-1)
1005 self._die_hooks()
1006 return
1007
1008 diff --git a/lib/_emerge/JobStatusDisplay.py b/lib/_emerge/JobStatusDisplay.py
1009 index e3cb2ff0f..bc50c4149 100644
1010 --- a/lib/_emerge/JobStatusDisplay.py
1011 +++ b/lib/_emerge/JobStatusDisplay.py
1012 @@ -127,7 +127,7 @@ class JobStatusDisplay:
1013 return True
1014
1015 def _format_msg(self, msg):
1016 - return ">>> %s" % msg
1017 + return ">>>> %s" % msg
1018
1019 def _erase(self):
1020 self._write(self._term_codes["carriage_return"] + self._term_codes["clr_eol"])
1021 diff --git a/lib/_emerge/MergeListItem.py b/lib/_emerge/MergeListItem.py
1022 index 87767c153..e666998cb 100644
1023 --- a/lib/_emerge/MergeListItem.py
1024 +++ b/lib/_emerge/MergeListItem.py
1025 @@ -81,7 +81,7 @@ class MergeListItem(CompositeTask):
1026 if not build_opts.pretend:
1027 self.statusMessage(msg)
1028 logger.log(
1029 - " >>> emerge (%s of %s) %s to %s"
1030 + " >>>> emerge (%s of %s) %s to %s"
1031 % (pkg_count.curval, pkg_count.maxval, pkg.cpv, pkg.root)
1032 )
1033
1034 diff --git a/lib/_emerge/PackageUninstall.py b/lib/_emerge/PackageUninstall.py
1035 index 468db3030..a5cb8c937 100644
1036 --- a/lib/_emerge/PackageUninstall.py
1037 +++ b/lib/_emerge/PackageUninstall.py
1038 @@ -93,7 +93,7 @@ class PackageUninstall(CompositeTask):
1039 self._async_unlock_builddir(returncode=retval)
1040 return
1041
1042 - self._writemsg_level(">>> Unmerging %s...\n" % (self.pkg.cpv,), noiselevel=-1)
1043 + self._writemsg_level(">>>> Unmerging %s...\n" % (self.pkg.cpv,), noiselevel=-1)
1044 self._emergelog("=== Unmerging... (%s)" % (self.pkg.cpv,))
1045
1046 cat, pf = portage.catsplit(self.pkg.cpv)
1047 @@ -115,9 +115,9 @@ class PackageUninstall(CompositeTask):
1048
1049 def _unmerge_exit(self, unmerge_task):
1050 if self._final_exit(unmerge_task) != os.EX_OK:
1051 - self._emergelog(" !!! unmerge FAILURE: %s" % (self.pkg.cpv,))
1052 + self._emergelog(" !!!! unmerge FAILURE: %s" % (self.pkg.cpv,))
1053 else:
1054 - self._emergelog(" >>> unmerge success: %s" % (self.pkg.cpv,))
1055 + self._emergelog(" >>>> unmerge success: %s" % (self.pkg.cpv,))
1056 self.world_atom(self.pkg)
1057 self._async_unlock_builddir(returncode=self.returncode)
1058
1059 diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py
1060 index 15d646c4f..6f82965e9 100644
1061 --- a/lib/_emerge/Scheduler.py
1062 +++ b/lib/_emerge/Scheduler.py
1063 @@ -303,22 +303,22 @@ class Scheduler(PollScheduler):
1064 or "--fetchonly" in self.myopts
1065 ):
1066 if "distlocks" not in features:
1067 - portage.writemsg(red("!!!") + "\n", noiselevel=-1)
1068 + portage.writemsg(red("!!!!") + "\n", noiselevel=-1)
1069 portage.writemsg(
1070 - red("!!!")
1071 + red("!!!!")
1072 + " parallel-fetching "
1073 + "requires the distlocks feature enabled"
1074 + "\n",
1075 noiselevel=-1,
1076 )
1077 portage.writemsg(
1078 - red("!!!")
1079 + red("!!!!")
1080 + " you have it disabled, "
1081 + "thus parallel-fetching is being disabled"
1082 + "\n",
1083 noiselevel=-1,
1084 )
1085 - portage.writemsg(red("!!!") + "\n", noiselevel=-1)
1086 + portage.writemsg(red("!!!!") + "\n", noiselevel=-1)
1087 elif merge_count > 1:
1088 self._parallel_fetch = True
1089
1090 @@ -442,7 +442,7 @@ class Scheduler(PollScheduler):
1091 if interactive_tasks:
1092 background = False
1093 writemsg_level(
1094 - ">>> Sending package output to stdio due "
1095 + ">>>> Sending package output to stdio due "
1096 + "to interactive package(s):\n",
1097 level=logging.INFO,
1098 noiselevel=-1,
1099 @@ -462,15 +462,15 @@ class Scheduler(PollScheduler):
1100 if self._max_jobs is True or self._max_jobs > 1:
1101 self._set_max_jobs(1)
1102 writemsg_level(
1103 - ">>> Setting --jobs=1 due "
1104 + ">>>> Setting --jobs=1 due "
1105 + "to the above interactive package(s)\n",
1106 level=logging.INFO,
1107 noiselevel=-1,
1108 )
1109 writemsg_level(
1110 - ">>> In order to temporarily mask "
1111 + ">>>> In order to temporarily mask "
1112 + "interactive updates, you may\n"
1113 - + ">>> specify --accept-properties=-interactive\n",
1114 + + ">>>> specify --accept-properties=-interactive\n",
1115 level=logging.INFO,
1116 noiselevel=-1,
1117 )
1118 @@ -732,7 +732,7 @@ class Scheduler(PollScheduler):
1119 pkgsettings["O"] = os.path.dirname(ebuild_path)
1120 if not digestgen(mysettings=pkgsettings, myportdb=portdb):
1121 writemsg_level(
1122 - "!!! Unable to generate manifest for '%s'.\n" % x.cpv,
1123 + "!!!! Unable to generate manifest for '%s'.\n" % x.cpv,
1124 level=logging.ERROR,
1125 noiselevel=-1,
1126 )
1127 @@ -2250,7 +2250,7 @@ class Scheduler(PollScheduler):
1128 world_set.add(atom)
1129 else:
1130 writemsg_level(
1131 - '\n!!! Unable to record %s in "world"\n' % (atom,),
1132 + '\n!!!! Unable to record %s in "world"\n' % (atom,),
1133 level=logging.WARN,
1134 noiselevel=-1,
1135 )
1136 diff --git a/lib/_emerge/SpawnProcess.py b/lib/_emerge/SpawnProcess.py
1137 index c43b17c12..2e5cfe6bc 100644
1138 --- a/lib/_emerge/SpawnProcess.py
1139 +++ b/lib/_emerge/SpawnProcess.py
1140 @@ -267,7 +267,7 @@ class SpawnProcess(SubProcess):
1141 if e.errno == errno.EPERM:
1142 # Reported with hardened kernel (bug #358211).
1143 writemsg_level(
1144 - "!!! kill: (%i) - Operation not permitted\n" % (p,),
1145 + "!!!! kill: (%i) - Operation not permitted\n" % (p,),
1146 level=logging.ERROR,
1147 noiselevel=-1,
1148 )
1149 diff --git a/lib/_emerge/SubProcess.py b/lib/_emerge/SubProcess.py
1150 index e2d2e61be..3383829ae 100644
1151 --- a/lib/_emerge/SubProcess.py
1152 +++ b/lib/_emerge/SubProcess.py
1153 @@ -31,7 +31,7 @@ class SubProcess(AbstractPollTask):
1154 if e.errno == errno.EPERM:
1155 # Reported with hardened kernel (bug #358211).
1156 writemsg_level(
1157 - "!!! kill: (%i) - Operation not permitted\n" % (self.pid,),
1158 + "!!!! kill: (%i) - Operation not permitted\n" % (self.pid,),
1159 level=logging.ERROR,
1160 noiselevel=-1,
1161 )
1162 diff --git a/lib/_emerge/actions.py b/lib/_emerge/actions.py
1163 index 05a115250..aa9316a46 100644
1164 --- a/lib/_emerge/actions.py
1165 +++ b/lib/_emerge/actions.py
1166 @@ -171,7 +171,9 @@ def action_build(
1167 getbinpkgs="--getbinpkg" in emerge_config.opts, **kwargs
1168 )
1169 except ParseError as e:
1170 - writemsg("\n\n!!!%s.\nSee make.conf(5) for more info.\n" % e, noiselevel=-1)
1171 + writemsg(
1172 + "\n\n!!!!%s.\nSee make.conf(5) for more info.\n" % e, noiselevel=-1
1173 + )
1174 return 1
1175
1176 # validate the state of the resume data
1177 @@ -364,9 +366,9 @@ def action_build(
1178 if success:
1179 if dropped_tasks:
1180 portage.writemsg(
1181 - "!!! One or more packages have been "
1182 + "!!!! One or more packages have been "
1183 + "dropped due to\n"
1184 - + "!!! masking or unsatisfied dependencies:\n\n",
1185 + + "!!!! masking or unsatisfied dependencies:\n\n",
1186 noiselevel=-1,
1187 )
1188 for task, atoms in dropped_tasks.items():
1189 @@ -430,7 +432,7 @@ def action_build(
1190 )
1191 except ParseError as e:
1192 writemsg(
1193 - "\n\n!!!%s.\nSee make.conf(5) for more info.\n" % e,
1194 + "\n\n!!!!%s.\nSee make.conf(5) for more info.\n" % e,
1195 noiselevel=-1,
1196 )
1197 return 1
1198 @@ -577,7 +579,7 @@ def action_build(
1199 for eroot in eroots:
1200 if need_write_vardb and not trees[eroot]["vartree"].dbapi.writable:
1201 writemsg_level(
1202 - "!!! %s\n"
1203 + "!!!! %s\n"
1204 % _("Read-only file system: %s")
1205 % trees[eroot]["vartree"].dbapi._dbroot,
1206 level=logging.ERROR,
1207 @@ -596,7 +598,7 @@ def action_build(
1208 and not trees[eroot]["bintree"].dbapi.writable
1209 ):
1210 writemsg_level(
1211 - "!!! %s\n"
1212 + "!!!! %s\n"
1213 % _("Read-only file system: %s")
1214 % trees[eroot]["bintree"].pkgdir,
1215 level=logging.ERROR,
1216 @@ -639,7 +641,7 @@ def action_build(
1217
1218 if retval == os.EX_OK and not (buildpkgonly or fetchonly or pretend):
1219 if "yes" == settings.get("AUTOCLEAN"):
1220 - portage.writemsg_stdout(">>> Auto-cleaning packages...\n")
1221 + portage.writemsg_stdout(">>>> Auto-cleaning packages...\n")
1222 unmerge(
1223 trees[settings["EROOT"]]["root_config"],
1224 myopts,
1225 @@ -662,15 +664,15 @@ def action_config(settings, trees, myopts, myfiles):
1226 enter_invalid = "--ask-enter-invalid" in myopts
1227 uq = UserQuery(myopts)
1228 if len(myfiles) != 1:
1229 - print(red("!!! config can only take a single package atom at this time\n"))
1230 + print(red("!!!! config can only take a single package atom at this time\n"))
1231 sys.exit(1)
1232 if not is_valid_package_atom(myfiles[0], allow_repo=True):
1233 portage.writemsg(
1234 - "!!! '%s' is not a valid package atom.\n" % myfiles[0], noiselevel=-1
1235 + "!!!! '%s' is not a valid package atom.\n" % myfiles[0], noiselevel=-1
1236 )
1237 - portage.writemsg("!!! Please check ebuild(5) for full details.\n")
1238 + portage.writemsg("!!!! Please check ebuild(5) for full details.\n")
1239 portage.writemsg(
1240 - "!!! (Did you specify a version but forget to prefix with '='?)\n"
1241 + "!!!! (Did you specify a version but forget to prefix with '='?)\n"
1242 )
1243 sys.exit(1)
1244 print()
1245 @@ -801,7 +803,7 @@ def action_depclean(
1246 noiselevel=-1,
1247 )
1248 if not matched_packages:
1249 - writemsg_level(">>> No packages selected for removal by %s\n" % action)
1250 + writemsg_level(">>>> No packages selected for removal by %s\n" % action)
1251 return 0
1252
1253 # The calculation is done in a separate function so that depgraph
1254 @@ -899,7 +901,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1255 # A nested set could not be resolved, so ignore nested sets.
1256 set_atoms[k] = root_config.sets[k].getAtoms()
1257 writemsg_level(
1258 - _("!!! The set '%s' " "contains a non-existent set named '%s'.\n")
1259 + _("!!!! The set '%s' " "contains a non-existent set named '%s'.\n")
1260 % (k, e),
1261 level=logging.ERROR,
1262 noiselevel=-1,
1263 @@ -909,12 +911,12 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1264 # Support @profile as an alternative to @system.
1265 if not (set_atoms["system"] or set_atoms["profile"]):
1266 writemsg_level(
1267 - _("!!! You have no system list.\n"), level=logging.WARNING, noiselevel=-1
1268 + _("!!!! You have no system list.\n"), level=logging.WARNING, noiselevel=-1
1269 )
1270
1271 if not set_atoms["selected"]:
1272 writemsg_level(
1273 - _("!!! You have no world file.\n"), level=logging.WARNING, noiselevel=-1
1274 + _("!!!! You have no world file.\n"), level=logging.WARNING, noiselevel=-1
1275 )
1276
1277 # Suppress world file warnings unless @world is completely empty,
1278 @@ -923,7 +925,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1279 world_atoms = bool(root_config.setconfig.getSetAtoms("world"))
1280 except portage.exception.PackageSetNotFound as e:
1281 writemsg_level(
1282 - _("!!! The set '%s' " "contains a non-existent set named '%s'.\n")
1283 + _("!!!! The set '%s' " "contains a non-existent set named '%s'.\n")
1284 % ("world", e),
1285 level=logging.ERROR,
1286 noiselevel=-1,
1287 @@ -932,20 +934,22 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1288 else:
1289 if not world_atoms:
1290 writemsg_level(
1291 - _("!!! Your @world set is empty.\n"), level=logging.ERROR, noiselevel=-1
1292 + _("!!!! Your @world set is empty.\n"),
1293 + level=logging.ERROR,
1294 + noiselevel=-1,
1295 )
1296 set_error = True
1297
1298 if set_error:
1299 writemsg_level(
1300 - _("!!! Aborting due to set configuration " "errors displayed above.\n"),
1301 + _("!!!! Aborting due to set configuration " "errors displayed above.\n"),
1302 level=logging.ERROR,
1303 noiselevel=-1,
1304 )
1305 return _depclean_result(1, [], False, 0, None)
1306
1307 if action == "depclean":
1308 - emergelog(xterm_titles, " >>> depclean")
1309 + emergelog(xterm_titles, " >>>> depclean")
1310
1311 writemsg_level("\nCalculating dependencies ")
1312 resolver_params = create_depgraph_params(myopts, "remove")
1313 @@ -1285,14 +1289,14 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1314 show_parents(pkg)
1315
1316 if not pkgs_to_remove:
1317 - writemsg_level(">>> No packages selected for removal by %s\n" % action)
1318 + writemsg_level(">>>> No packages selected for removal by %s\n" % action)
1319 if "--verbose" not in myopts:
1320 writemsg_level(
1321 - ">>> To see reverse dependencies, use %s\n" % good("--verbose")
1322 + ">>>> To see reverse dependencies, use %s\n" % good("--verbose")
1323 )
1324 if action == "prune":
1325 writemsg_level(
1326 - ">>> To ignore dependencies, use %s\n" % good("--nodeps")
1327 + ">>>> To ignore dependencies, use %s\n" % good("--nodeps")
1328 )
1329
1330 return pkgs_to_remove
1331 @@ -1324,7 +1328,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1332 provider_cache = {}
1333 consumer_map = {}
1334
1335 - writemsg_level(">>> Checking for lib consumers...\n")
1336 + writemsg_level(">>>> Checking for lib consumers...\n")
1337
1338 for pkg in cleanlist:
1339
1340 @@ -1391,7 +1395,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1341 search_files.add(lib_consumer)
1342 search_files.update(providers)
1343
1344 - writemsg_level(">>> Assigning files to packages...\n")
1345 + writemsg_level(">>>> Assigning files to packages...\n")
1346 file_owners = {}
1347 for f in search_files:
1348 owner_set = set()
1349 @@ -1498,7 +1502,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1350
1351 # Add lib providers to the graph as children of lib consumers,
1352 # and also add any dependencies pulled in by the provider.
1353 - writemsg_level(">>> Adding lib providers to graph...\n")
1354 + writemsg_level(">>>> Adding lib providers to graph...\n")
1355
1356 for pkg, consumers in consumer_map.items():
1357 for consumer_dblink in set(chain(*consumers.values())):
1358 @@ -1538,7 +1542,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
1359 clean_set = set(cleanlist)
1360
1361 if clean_set:
1362 - writemsg_level(">>> Calculating removal order...\n")
1363 + writemsg_level(">>>> Calculating removal order...\n")
1364 # Use a topological sort to create an unmerge order such that
1365 # each package is unmerged before it's dependencies. This is
1366 # necessary to avoid breaking things that may need to run
1367 @@ -1747,7 +1751,7 @@ def action_deselect(settings, trees, opts, atoms):
1368 filename = "world"
1369
1370 writemsg_stdout(
1371 - '>>> %s %s from "%s" favorites file...\n'
1372 + '>>>> %s %s from "%s" favorites file...\n'
1373 % (action_desc, colorize("INFORM", str(atom)), filename),
1374 noiselevel=-1,
1375 )
1376 @@ -1766,7 +1770,7 @@ def action_deselect(settings, trees, opts, atoms):
1377 if not pretend:
1378 world_set.replace(remaining)
1379 else:
1380 - print('>>> No matching atoms found in "world" favorites file...')
1381 + print('>>>> No matching atoms found in "world" favorites file...')
1382 finally:
1383 if locked:
1384 world_set.unlock()
1385 @@ -2263,7 +2267,7 @@ def action_info(settings, trees, myopts, myfiles):
1386 continue
1387
1388 writemsg_stdout(
1389 - ">>> Attempting to run pkg_info() for '%s'\n" % pkg.cpv, noiselevel=-1
1390 + ">>>> Attempting to run pkg_info() for '%s'\n" % pkg.cpv, noiselevel=-1
1391 )
1392
1393 if pkg_type == "installed":
1394 @@ -2353,7 +2357,7 @@ def action_search(root_config, myopts, myfiles, spinner):
1395 searchinstance.execute(mysearch)
1396 except re.error as comment:
1397 print(
1398 - '\n!!! Regular expression error in "%s": %s' % (mysearch, comment)
1399 + '\n!!!! Regular expression error in "%s": %s' % (mysearch, comment)
1400 )
1401 sys.exit(1)
1402 searchinstance.output()
1403 @@ -2426,7 +2430,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1404 )
1405 for line in textwrap.wrap(msg, 70):
1406 writemsg_level(
1407 - "!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
1408 + "!!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
1409 )
1410 for i in e.args[0]:
1411 writemsg_level(
1412 @@ -2440,7 +2444,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1413 if atom.use and atom.use.conditional:
1414 writemsg_level(
1415 (
1416 - "\n\n!!! '%s' contains a conditional "
1417 + "\n\n!!!! '%s' contains a conditional "
1418 + "which is not allowed.\n"
1419 )
1420 % (x,),
1421 @@ -2448,7 +2452,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1422 noiselevel=-1,
1423 )
1424 writemsg_level(
1425 - "!!! Please check ebuild(5) for full details.\n",
1426 + "!!!! Please check ebuild(5) for full details.\n",
1427 level=logging.ERROR,
1428 )
1429 return 1
1430 @@ -2457,7 +2461,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1431 elif x.startswith(os.sep):
1432 if not x.startswith(eroot):
1433 writemsg_level(
1434 - ("!!! '%s' does not start with" + " $EROOT.\n") % x,
1435 + ("!!!! '%s' does not start with" + " $EROOT.\n") % x,
1436 level=logging.ERROR,
1437 noiselevel=-1,
1438 )
1439 @@ -2477,7 +2481,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1440 msg.append("'%s' is not a valid package atom." % (x,))
1441 msg.append("Please check ebuild(5) for full details.")
1442 writemsg_level(
1443 - "".join("!!! %s\n" % line for line in msg),
1444 + "".join("!!!! %s\n" % line for line in msg),
1445 level=logging.ERROR,
1446 noiselevel=-1,
1447 )
1448 @@ -2512,7 +2516,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1449 msg.append("'%s' is not a valid package atom." % (x,))
1450 msg.append("Please check ebuild(5) for full details.")
1451 writemsg_level(
1452 - "".join("!!! %s\n" % line for line in msg),
1453 + "".join("!!!! %s\n" % line for line in msg),
1454 level=logging.ERROR,
1455 noiselevel=-1,
1456 )
1457 @@ -2542,7 +2546,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
1458 valid_atoms.append(portage.dep.Atom(atom))
1459 else:
1460 writemsg_level(
1461 - ("!!! '%s' is not claimed " + "by any package.\n") % lookup_owners[0],
1462 + ("!!!! '%s' is not claimed " + "by any package.\n") % lookup_owners[0],
1463 level=logging.WARNING,
1464 noiselevel=-1,
1465 )
1466 @@ -2657,9 +2661,10 @@ def adjust_config(myopts, settings):
1467 try:
1468 CLEAN_DELAY = int(settings.get("CLEAN_DELAY", str(CLEAN_DELAY)))
1469 except ValueError as e:
1470 - portage.writemsg("!!! %s\n" % str(e), noiselevel=-1)
1471 + portage.writemsg("!!!! %s\n" % str(e), noiselevel=-1)
1472 portage.writemsg(
1473 - "!!! Unable to parse integer: CLEAN_DELAY='%s'\n" % settings["CLEAN_DELAY"],
1474 + "!!!! Unable to parse integer: CLEAN_DELAY='%s'\n"
1475 + % settings["CLEAN_DELAY"],
1476 noiselevel=-1,
1477 )
1478 settings["CLEAN_DELAY"] = str(CLEAN_DELAY)
1479 @@ -2671,9 +2676,9 @@ def adjust_config(myopts, settings):
1480 settings.get("EMERGE_WARNING_DELAY", str(EMERGE_WARNING_DELAY))
1481 )
1482 except ValueError as e:
1483 - portage.writemsg("!!! %s\n" % str(e), noiselevel=-1)
1484 + portage.writemsg("!!!! %s\n" % str(e), noiselevel=-1)
1485 portage.writemsg(
1486 - "!!! Unable to parse integer: EMERGE_WARNING_DELAY='%s'\n"
1487 + "!!!! Unable to parse integer: EMERGE_WARNING_DELAY='%s'\n"
1488 % settings["EMERGE_WARNING_DELAY"],
1489 noiselevel=-1,
1490 )
1491 @@ -2705,14 +2710,17 @@ def adjust_config(myopts, settings):
1492 PORTAGE_DEBUG = int(settings.get("PORTAGE_DEBUG", str(PORTAGE_DEBUG)))
1493 if PORTAGE_DEBUG not in (0, 1):
1494 portage.writemsg(
1495 - "!!! Invalid value: PORTAGE_DEBUG='%i'\n" % PORTAGE_DEBUG, noiselevel=-1
1496 + "!!!! Invalid value: PORTAGE_DEBUG='%i'\n" % PORTAGE_DEBUG,
1497 + noiselevel=-1,
1498 + )
1499 + portage.writemsg(
1500 + "!!!! PORTAGE_DEBUG must be either 0 or 1\n", noiselevel=-1
1501 )
1502 - portage.writemsg("!!! PORTAGE_DEBUG must be either 0 or 1\n", noiselevel=-1)
1503 PORTAGE_DEBUG = 0
1504 except ValueError as e:
1505 - portage.writemsg("!!! %s\n" % str(e), noiselevel=-1)
1506 + portage.writemsg("!!!! %s\n" % str(e), noiselevel=-1)
1507 portage.writemsg(
1508 - "!!! Unable to parse integer: PORTAGE_DEBUG='%s'\n"
1509 + "!!!! Unable to parse integer: PORTAGE_DEBUG='%s'\n"
1510 % settings["PORTAGE_DEBUG"],
1511 noiselevel=-1,
1512 )
1513 @@ -2910,9 +2918,9 @@ def getgccversion(chost=None):
1514 gcc_ver_prefix = "gcc-"
1515
1516 gcc_not_found_error = red(
1517 - "!!! No gcc found. You probably need to 'source /etc/profile'\n"
1518 - + "!!! to update the environment of this terminal and possibly\n"
1519 - + "!!! other terminals also.\n"
1520 + "!!!! No gcc found. You probably need to 'source /etc/profile'\n"
1521 + + "!!!! to update the environment of this terminal and possibly\n"
1522 + + "!!!! other terminals also.\n"
1523 )
1524
1525 if chost:
1526 @@ -2992,7 +3000,7 @@ def check_procfs():
1527 return os.EX_OK
1528 msg = "It seems that %s is not mounted. You have been warned." % procfs_path
1529 writemsg_level(
1530 - "".join("!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
1531 + "".join("!!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
1532 level=logging.ERROR,
1533 noiselevel=-1,
1534 )
1535 @@ -3003,7 +3011,7 @@ def config_protect_check(trees):
1536 for root, root_trees in trees.items():
1537 settings = root_trees["root_config"].settings
1538 if not settings.get("CONFIG_PROTECT"):
1539 - msg = "!!! CONFIG_PROTECT is empty"
1540 + msg = "!!!! CONFIG_PROTECT is empty"
1541 if settings["ROOT"] != "/":
1542 msg += " for '%s'" % root
1543 msg += "\n"
1544 @@ -3099,7 +3107,7 @@ def missing_sets_warning(root_config, missing_sets):
1545 % (os.path.join(global_config_path, "sets/portage.conf"),)
1546 )
1547 msg.append(" is missing or corrupt.")
1548 - msg.append(" Falling back to default world and system set configuration!!!")
1549 + msg.append(" Falling back to default world and system set configuration!!!!")
1550 for line in msg:
1551 writemsg_level(line + "\n", level=logging.ERROR, noiselevel=-1)
1552
1553 @@ -3405,7 +3413,7 @@ def run_action(emerge_config):
1554 )
1555 except ParseError as e:
1556 writemsg(
1557 - "\n\n!!!%s.\nSee make.conf(5) for more info.\n" % (e,),
1558 + "\n\n!!!!%s.\nSee make.conf(5) for more info.\n" % (e,),
1559 noiselevel=-1,
1560 )
1561 return 1
1562 @@ -3488,7 +3496,7 @@ def run_action(emerge_config):
1563 print(
1564 colorize(
1565 "BAD",
1566 - "\n*** emerging by path is broken " "and may not always work!!!\n",
1567 + "\n*** emerging by path is broken " "and may not always work!!!!\n",
1568 )
1569 )
1570 break
1571 @@ -3579,7 +3587,7 @@ def run_action(emerge_config):
1572 # note: this breaks `emerge --ask | tee logfile`, but that doesn't work anyway.
1573 if ("--ask" in emerge_config.opts) and (not sys.stdin.isatty()):
1574 portage.writemsg(
1575 - '!!! "--ask" should only be used in a terminal. Exiting.\n', noiselevel=-1
1576 + '!!!! "--ask" should only be used in a terminal. Exiting.\n', noiselevel=-1
1577 )
1578 return 1
1579
1580 @@ -3708,8 +3716,8 @@ def run_action(emerge_config):
1581 portage.util.ensure_dirs(emerge_log_dir)
1582 except portage.exception.PortageException as e:
1583 writemsg_level(
1584 - "!!! Error creating directory for "
1585 - + "EMERGE_LOG_DIR='%s':\n!!! %s\n" % (emerge_log_dir, e),
1586 + "!!!! Error creating directory for "
1587 + + "EMERGE_LOG_DIR='%s':\n!!!! %s\n" % (emerge_log_dir, e),
1588 noiselevel=-1,
1589 level=logging.ERROR,
1590 )
1591 @@ -3874,7 +3882,7 @@ def run_action(emerge_config):
1592 )
1593 for line in textwrap.wrap(msg, 70):
1594 writemsg_level(
1595 - "!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
1596 + "!!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
1597 )
1598 for i in e.args[0]:
1599 writemsg_level(
1600 @@ -3889,7 +3897,7 @@ def run_action(emerge_config):
1601 msg.append("'%s' is not a valid package atom." % (x,))
1602 msg.append("Please check ebuild(5) for full details.")
1603 writemsg_level(
1604 - "".join("!!! %s\n" % line for line in msg),
1605 + "".join("!!!! %s\n" % line for line in msg),
1606 level=logging.ERROR,
1607 noiselevel=-1,
1608 )
1609 @@ -3920,7 +3928,7 @@ def run_action(emerge_config):
1610 msg.append("'%s' is not a valid package atom." % (x,))
1611 msg.append("Please check ebuild(5) for full details.")
1612 writemsg_level(
1613 - "".join("!!! %s\n" % line for line in msg),
1614 + "".join("!!!! %s\n" % line for line in msg),
1615 level=logging.ERROR,
1616 noiselevel=-1,
1617 )
1618 diff --git a/lib/_emerge/countdown.py b/lib/_emerge/countdown.py
1619 index 9d506c3c7..f40ebbf05 100644
1620 --- a/lib/_emerge/countdown.py
1621 +++ b/lib/_emerge/countdown.py
1622 @@ -10,8 +10,8 @@ from portage.output import colorize
1623 def countdown(secs=5, doing="Starting"):
1624 if secs:
1625 print(
1626 - ">>> Waiting %s seconds before starting...\n"
1627 - ">>> (Control-C to abort)...\n"
1628 + ">>>> Waiting %s seconds before starting...\n"
1629 + ">>>> (Control-C to abort)...\n"
1630 "%s in:" % (secs, doing),
1631 end="",
1632 )
1633 diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
1634 index 22d0be196..7c869ae75 100644
1635 --- a/lib/_emerge/depgraph.py
1636 +++ b/lib/_emerge/depgraph.py
1637 @@ -1140,7 +1140,7 @@ class depgraph:
1638 "\n%s\n\n"
1639 % colorize(
1640 "WARN",
1641 - "!!! Detected ebuild dependency change(s) without revision bump:",
1642 + "!!!! Detected ebuild dependency change(s) without revision bump:",
1643 ),
1644 noiselevel=-1,
1645 )
1646 @@ -1223,7 +1223,7 @@ class depgraph:
1647 def _show_ignored_binaries_respect_use(self, respect_use):
1648
1649 writemsg(
1650 - "\n!!! The following binary packages have been ignored "
1651 + "\n!!!! The following binary packages have been ignored "
1652 + "due to non matching USE:\n\n",
1653 noiselevel=-1,
1654 )
1655 @@ -1256,7 +1256,7 @@ class depgraph:
1656 def _show_ignored_binaries_changed_deps(self, changed_deps):
1657
1658 writemsg(
1659 - "\n!!! The following binary packages have been "
1660 + "\n!!!! The following binary packages have been "
1661 "ignored due to changed dependencies:\n\n",
1662 noiselevel=-1,
1663 )
1664 @@ -1364,7 +1364,7 @@ class depgraph:
1665 continue
1666
1667 writemsg(
1668 - "\n!!! The following update has been skipped "
1669 + "\n!!!! The following update has been skipped "
1670 + "due to unsatisfied dependencies:\n\n",
1671 noiselevel=-1,
1672 )
1673 @@ -1393,9 +1393,9 @@ class depgraph:
1674 # These are shown in abbreviated form, in order to avoid terminal
1675 # flooding from mask messages as reported in bug #285832.
1676 writemsg(
1677 - "\n!!! The following update(s) have been skipped "
1678 + "\n!!!! The following update(s) have been skipped "
1679 + "due to unsatisfied dependencies\n"
1680 - + "!!! triggered by backtracking:\n\n",
1681 + + "!!!! triggered by backtracking:\n\n",
1682 noiselevel=-1,
1683 )
1684 for pkg, parent_atoms in backtrack_masked:
1685 @@ -1554,7 +1554,7 @@ class depgraph:
1686
1687 if debug:
1688 writemsg_level(
1689 - "\n!!! Slot conflict handler started.\n",
1690 + "\n!!!! Slot conflict handler started.\n",
1691 level=logging.DEBUG,
1692 noiselevel=-1,
1693 )
1694 @@ -1718,7 +1718,7 @@ class depgraph:
1695
1696 if debug:
1697 writemsg_level(
1698 - "\n!!! Slot conflict graph:\n", level=logging.DEBUG, noiselevel=-1
1699 + "\n!!!! Slot conflict graph:\n", level=logging.DEBUG, noiselevel=-1
1700 )
1701 conflict_graph.debug_print()
1702
1703 @@ -1793,7 +1793,7 @@ class depgraph:
1704
1705 if debug:
1706 writemsg_level(
1707 - "\n!!! Slot conflict solution:\n", level=logging.DEBUG, noiselevel=-1
1708 + "\n!!!! Slot conflict solution:\n", level=logging.DEBUG, noiselevel=-1
1709 )
1710 for conflict in conflicts:
1711 writemsg_level(
1712 @@ -1920,7 +1920,7 @@ class depgraph:
1713 ):
1714 if debug:
1715 writemsg_level(
1716 - "!!! backtracking loop detected: %s %s\n"
1717 + "!!!! backtracking loop detected: %s %s\n"
1718 % (pkg, self._dynamic_config._runtime_pkg_mask[pkg]),
1719 level=logging.DEBUG,
1720 noiselevel=-1,
1721 @@ -4567,11 +4567,13 @@ class depgraph:
1722 x = os.path.join(pkgsettings["PKGDIR"], x)
1723 else:
1724 writemsg(
1725 - "\n\n!!! Binary package '" + str(x) + "' does not exist.\n",
1726 + "\n\n!!!! Binary package '"
1727 + + str(x)
1728 + + "' does not exist.\n",
1729 noiselevel=-1,
1730 )
1731 writemsg(
1732 - "!!! Please ensure the tbz2 exists as specified.\n\n",
1733 + "!!!! Please ensure the tbz2 exists as specified.\n\n",
1734 noiselevel=-1,
1735 )
1736 return 0, myfavorites
1737 @@ -4625,7 +4627,7 @@ class depgraph:
1738 tree_root = os.path.dirname(os.path.dirname(pkgdir))
1739 cp = pkgdir[len(tree_root) + 1 :]
1740 error_msg = (
1741 - "\n\n!!! '%s' is not in a valid ebuild repository "
1742 + "\n\n!!!! '%s' is not in a valid ebuild repository "
1743 "hierarchy or does not exist\n"
1744 ) % x
1745 if not portage.isvalidatom(cp):
1746 @@ -4690,7 +4692,7 @@ class depgraph:
1747 elif x.startswith(os.path.sep):
1748 if not x.startswith(eroot):
1749 portage.writemsg(
1750 - ("\n\n!!! '%s' does not start with" + " $EROOT.\n") % x,
1751 + ("\n\n!!!! '%s' does not start with" + " $EROOT.\n") % x,
1752 noiselevel=-1,
1753 )
1754 self._dynamic_config._skip_restart = True
1755 @@ -4703,7 +4705,7 @@ class depgraph:
1756 if not f.startswith(eroot):
1757 portage.writemsg(
1758 (
1759 - "\n\n!!! '%s' (resolved from '%s') does not start with"
1760 + "\n\n!!!! '%s' (resolved from '%s') does not start with"
1761 + " $EROOT.\n"
1762 )
1763 % (f, x),
1764 @@ -4768,11 +4770,12 @@ class depgraph:
1765 continue
1766 if not is_valid_package_atom(x, allow_repo=True):
1767 portage.writemsg(
1768 - "\n\n!!! '%s' is not a valid package atom.\n" % x, noiselevel=-1
1769 + "\n\n!!!! '%s' is not a valid package atom.\n" % x,
1770 + noiselevel=-1,
1771 )
1772 - portage.writemsg("!!! Please check ebuild(5) for full details.\n")
1773 + portage.writemsg("!!!! Please check ebuild(5) for full details.\n")
1774 portage.writemsg(
1775 - "!!! (Did you specify a version but forget to prefix with '='?)\n"
1776 + "!!!! (Did you specify a version but forget to prefix with '='?)\n"
1777 )
1778 self._dynamic_config._skip_restart = True
1779 return (0, [])
1780 @@ -4865,13 +4868,13 @@ class depgraph:
1781 if atom.use and atom.use.conditional:
1782 writemsg(
1783 (
1784 - "\n\n!!! '%s' contains a conditional "
1785 + "\n\n!!!! '%s' contains a conditional "
1786 + "which is not allowed.\n"
1787 )
1788 % (x,),
1789 noiselevel=-1,
1790 )
1791 - writemsg("!!! Please check ebuild(5) for full details.\n")
1792 + writemsg("!!!! Please check ebuild(5) for full details.\n")
1793 self._dynamic_config._skip_restart = True
1794 return (0, [])
1795
1796 @@ -4896,7 +4899,7 @@ class depgraph:
1797
1798 if not owners:
1799 portage.writemsg(
1800 - ("\n\n!!! '%s' is not claimed " + "by any package.\n")
1801 + ("\n\n!!!! '%s' is not claimed " + "by any package.\n")
1802 % lookup_owners[0],
1803 noiselevel=-1,
1804 )
1805 @@ -5031,7 +5034,7 @@ class depgraph:
1806 if not self.need_restart():
1807 writemsg(
1808 (
1809 - "\n\n!!! Problem "
1810 + "\n\n!!!! Problem "
1811 + "resolving dependencies for %s\n"
1812 )
1813 % arg.arg,
1814 @@ -5132,7 +5135,7 @@ class depgraph:
1815 elif isinstance(arg, SetArg):
1816 writemsg(
1817 (
1818 - "\n\n!!! Problem resolving "
1819 + "\n\n!!!! Problem resolving "
1820 + "dependencies for %s from %s\n"
1821 )
1822 % (atom, arg.arg),
1823 @@ -5140,7 +5143,10 @@ class depgraph:
1824 )
1825 else:
1826 writemsg(
1827 - ("\n\n!!! Problem resolving " + "dependencies for %s\n")
1828 + (
1829 + "\n\n!!!! Problem resolving "
1830 + + "dependencies for %s\n"
1831 + )
1832 % (atom,),
1833 noiselevel=-1,
1834 )
1835 @@ -5150,10 +5156,10 @@ class depgraph:
1836 raise # Needed else can't exit
1837 except Exception as e:
1838 writemsg(
1839 - "\n\n!!! Problem in '%s' dependencies.\n" % atom, noiselevel=-1
1840 + "\n\n!!!! Problem in '%s' dependencies.\n" % atom, noiselevel=-1
1841 )
1842 writemsg(
1843 - "!!! %s %s\n" % (str(e), str(getattr(e, "__module__", None)))
1844 + "!!!! %s %s\n" % (str(e), str(getattr(e, "__module__", None)))
1845 )
1846 raise
1847
1848 @@ -5674,7 +5680,7 @@ class depgraph:
1849 )
1850 except InvalidDependString as e:
1851 writemsg_level(
1852 - "!!! Invalid RDEPEND in "
1853 + "!!!! Invalid RDEPEND in "
1854 + "'%svar/db/pkg/%s/RDEPEND': %s\n" % (pkg.root, pkg.cpv, e),
1855 noiselevel=-1,
1856 level=logging.ERROR,
1857 @@ -5713,7 +5719,7 @@ class depgraph:
1858 if not pkg.installed:
1859 raise
1860 writemsg_level(
1861 - "!!! Invalid RDEPEND in "
1862 + "!!!! Invalid RDEPEND in "
1863 + "'%svar/db/pkg/%s/RDEPEND': %s\n" % (pkg.root, pkg.cpv, e),
1864 noiselevel=-1,
1865 level=logging.ERROR,
1866 @@ -6403,7 +6409,7 @@ class depgraph:
1867 pkg = show_req_use
1868 output_cpv = pkg.cpv + _repo_separator + pkg.repo
1869 writemsg(
1870 - "\n!!! "
1871 + "\n!!!! "
1872 + colorize("BAD", "The ebuild selected to satisfy ")
1873 + colorize("INFORM", xinfo)
1874 + colorize("BAD", " has unmet requirements.")
1875 @@ -6447,7 +6453,7 @@ class depgraph:
1876 noiselevel=-1,
1877 )
1878 writemsg(
1879 - "!!! One of the following packages is required to complete your request:\n",
1880 + "!!!! One of the following packages is required to complete your request:\n",
1881 noiselevel=-1,
1882 )
1883 for pkg, mreasons in show_missing_use:
1884 @@ -6464,7 +6470,7 @@ class depgraph:
1885
1886 elif masked_packages:
1887 writemsg(
1888 - "\n!!! "
1889 + "\n!!!! "
1890 + colorize("BAD", "All ebuilds that could satisfy ")
1891 + colorize("INFORM", xinfo)
1892 + colorize("BAD", " have been masked.")
1893 @@ -6472,7 +6478,7 @@ class depgraph:
1894 noiselevel=-1,
1895 )
1896 writemsg(
1897 - "!!! One of the following masked packages is required to complete your request:\n",
1898 + "!!!! One of the following masked packages is required to complete your request:\n",
1899 noiselevel=-1,
1900 )
1901 have_eapi_mask = show_masked_packages(masked_packages)
1902 @@ -8978,7 +8984,7 @@ class depgraph:
1903 )
1904 except portage.exception.InvalidDependString as e:
1905 portage.writemsg(
1906 - "!!! Invalid RDEPEND in "
1907 + "!!!! Invalid RDEPEND in "
1908 + "'%svar/db/pkg/%s/RDEPEND': %s\n"
1909 % (running_root, running_portage.cpv, e),
1910 noiselevel=-1,
1911 @@ -9385,7 +9391,7 @@ class depgraph:
1912 )
1913 except portage.exception.InvalidDependString as e:
1914 portage.writemsg(
1915 - "!!! Invalid PROVIDE in "
1916 + "!!!! Invalid PROVIDE in "
1917 + "'%svar/db/pkg/%s/PROVIDE': %s\n"
1918 % (task.root, task.cpv, e),
1919 noiselevel=-1,
1920 @@ -9423,7 +9429,7 @@ class depgraph:
1921 skip = True
1922 except portage.exception.InvalidDependString as e:
1923 portage.writemsg(
1924 - "!!! Invalid PROVIDE in "
1925 + "!!!! Invalid PROVIDE in "
1926 + "'%svar/db/pkg/%s/PROVIDE': %s\n"
1927 % (task.root, task.cpv, e),
1928 noiselevel=-1,
1929 @@ -9465,7 +9471,7 @@ class depgraph:
1930 break
1931 except portage.exception.InvalidDependString as e:
1932 portage.writemsg(
1933 - "!!! Invalid PROVIDE in "
1934 + "!!!! Invalid PROVIDE in "
1935 + "'%svar/db/pkg/%s/PROVIDE': %s\n"
1936 % (task.root, task.cpv, e),
1937 noiselevel=-1,
1938 @@ -10276,7 +10282,7 @@ class depgraph:
1939 for (abs_user_config, f), path in file_to_write_to.items():
1940 if path is None:
1941 problems.append(
1942 - "!!! No file to write for '%s'\n"
1943 + "!!!! No file to write for '%s'\n"
1944 % os.path.join(abs_user_config, f)
1945 )
1946
1947 @@ -10353,7 +10359,7 @@ class depgraph:
1948 file_contents = []
1949 else:
1950 problems.append(
1951 - "!!! Failed to read '%s': %s\n" % (file_to_write_to, e)
1952 + "!!!! Failed to read '%s': %s\n" % (file_to_write_to, e)
1953 )
1954 if file_contents is not None:
1955 file_contents.extend(changes)
1956 @@ -10370,7 +10376,7 @@ class depgraph:
1957 try:
1958 write_atomic(file_to_write_to, "".join(file_contents))
1959 except PortageException:
1960 - problems.append("!!! Failed to write '%s'\n" % file_to_write_to)
1961 + problems.append("!!!! Failed to write '%s'\n" % file_to_write_to)
1962
1963 if not quiet and (p_mask_change_msg or masked_by_missing_keywords):
1964 msg = [
1965 @@ -10522,23 +10528,23 @@ class depgraph:
1966
1967 if world_problems:
1968 writemsg(
1969 - "\n!!! Problems have been " + "detected with your world file\n",
1970 + "\n!!!! Problems have been " + "detected with your world file\n",
1971 noiselevel=-1,
1972 )
1973 writemsg(
1974 - "!!! Please run " + green("emaint --check world") + "\n\n",
1975 + "!!!! Please run " + green("emaint --check world") + "\n\n",
1976 noiselevel=-1,
1977 )
1978
1979 if self._dynamic_config._missing_args:
1980 writemsg(
1981 "\n"
1982 - + colorize("BAD", "!!!")
1983 + + colorize("BAD", "!!!!")
1984 + " Ebuilds for the following packages are either all\n",
1985 noiselevel=-1,
1986 )
1987 writemsg(
1988 - colorize("BAD", "!!!") + " masked or don't exist:\n", noiselevel=-1
1989 + colorize("BAD", "!!!!") + " masked or don't exist:\n", noiselevel=-1
1990 )
1991 writemsg(
1992 " ".join(str(atom) for arg, atom in self._dynamic_config._missing_args)
1993 @@ -10604,7 +10610,7 @@ class depgraph:
1994 if masked_packages:
1995 writemsg(
1996 "\n"
1997 - + colorize("BAD", "!!!")
1998 + + colorize("BAD", "!!!!")
1999 + " The following updates are masked by LICENSE changes:\n",
2000 noiselevel=-1,
2001 )
2002 @@ -10625,7 +10631,7 @@ class depgraph:
2003 if masked_packages:
2004 writemsg(
2005 "\n"
2006 - + colorize("BAD", "!!!")
2007 + + colorize("BAD", "!!!!")
2008 + " The following installed packages are masked:\n",
2009 noiselevel=-1,
2010 )
2011 @@ -10639,25 +10645,27 @@ class depgraph:
2012 if self._dynamic_config._buildpkgonly_deps_unsatisfied:
2013 self._show_merge_list()
2014 writemsg(
2015 - "\n!!! --buildpkgonly requires all " "dependencies to be merged.\n",
2016 + "\n!!!! --buildpkgonly requires all " "dependencies to be merged.\n",
2017 noiselevel=-1,
2018 )
2019 writemsg(
2020 - "!!! Cannot merge requested packages. " "Merge deps and try again.\n\n",
2021 + "!!!! Cannot merge requested packages. "
2022 + "Merge deps and try again.\n\n",
2023 noiselevel=-1,
2024 )
2025
2026 if self._dynamic_config._quickpkg_direct_deps_unsatisfied:
2027 self._show_merge_list()
2028 writemsg(
2029 - "\n!!! --quickpkg-direct requires all "
2030 + "\n!!!! --quickpkg-direct requires all "
2031 "dependencies to be merged for root '{}'.\n".format(
2032 self._frozen_config._running_root.root
2033 ),
2034 noiselevel=-1,
2035 )
2036 writemsg(
2037 - "!!! Cannot merge requested packages. " "Merge deps and try again.\n\n",
2038 + "!!!! Cannot merge requested packages. "
2039 + "Merge deps and try again.\n\n",
2040 noiselevel=-1,
2041 )
2042
2043 @@ -10704,10 +10712,11 @@ class depgraph:
2044 added_favorites.add(myfavkey)
2045 except portage.exception.InvalidDependString as e:
2046 writemsg(
2047 - "\n\n!!! '%s' has invalid PROVIDE: %s\n" % (x.cpv, e), noiselevel=-1
2048 + "\n\n!!!! '%s' has invalid PROVIDE: %s\n" % (x.cpv, e),
2049 + noiselevel=-1,
2050 )
2051 writemsg(
2052 - "!!! see '%s'\n\n"
2053 + "!!!! see '%s'\n\n"
2054 % os.path.join(x.root, portage.VDB_PATH, x.cpv, "PROVIDE"),
2055 noiselevel=-1,
2056 )
2057 @@ -10753,7 +10762,7 @@ class depgraph:
2058 else:
2059 filename = "world"
2060 writemsg_stdout(
2061 - '>>> Recording %s in "%s" favorites file...\n'
2062 + '>>>> Recording %s in "%s" favorites file...\n'
2063 % (colorize("INFORM", str(a)), filename),
2064 noiselevel=-1,
2065 )
2066 @@ -11386,11 +11395,11 @@ def ambiguous_package_name(arg, atoms, root_config, spinner, myopts):
2067
2068 if "--quiet" in myopts:
2069 writemsg(
2070 - '!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
2071 + '!!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
2072 noiselevel=-1,
2073 )
2074 writemsg(
2075 - "!!! one of the following fully-qualified ebuild names instead:\n\n",
2076 + "!!!! one of the following fully-qualified ebuild names instead:\n\n",
2077 noiselevel=-1,
2078 )
2079 for cp in sorted(set(portage.dep_getkey(atom) for atom in atoms)):
2080 @@ -11413,11 +11422,11 @@ def ambiguous_package_name(arg, atoms, root_config, spinner, myopts):
2081 s.addCP(cp)
2082 s.output()
2083 writemsg(
2084 - '!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
2085 + '!!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
2086 noiselevel=-1,
2087 )
2088 writemsg(
2089 - "!!! one of the above fully-qualified ebuild names instead.\n\n", noiselevel=-1
2090 + "!!!! one of the above fully-qualified ebuild names instead.\n\n", noiselevel=-1
2091 )
2092
2093
2094 diff --git a/lib/_emerge/main.py b/lib/_emerge/main.py
2095 index 34555b26c..e30c59e07 100644
2096 --- a/lib/_emerge/main.py
2097 +++ b/lib/_emerge/main.py
2098 @@ -96,8 +96,8 @@ COWSAY_MOO = r"""
2099
2100
2101 def multiple_actions(action1, action2):
2102 - sys.stderr.write("\n!!! Multiple actions requested... Please choose one only.\n")
2103 - sys.stderr.write("!!! '%s' or '%s'\n\n" % (action1, action2))
2104 + sys.stderr.write("\n!!!! Multiple actions requested... Please choose one only.\n")
2105 + sys.stderr.write("!!!! '%s' or '%s'\n\n" % (action1, action2))
2106 sys.exit(1)
2107
2108
2109 @@ -1170,7 +1170,7 @@ def profile_check(trees, myaction):
2110 "--help, --info, --search, --sync, and --version."
2111 )
2112 writemsg_level(
2113 - "".join("!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
2114 + "".join("!!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
2115 level=logging.ERROR,
2116 noiselevel=-1,
2117 )
2118 diff --git a/lib/_emerge/post_emerge.py b/lib/_emerge/post_emerge.py
2119 index 019167251..911050250 100644
2120 --- a/lib/_emerge/post_emerge.py
2121 +++ b/lib/_emerge/post_emerge.py
2122 @@ -139,10 +139,10 @@ def post_emerge(myaction, myopts, myfiles, target_root, trees, mtimedb, retval):
2123 if vardbapi._plib_registry.hasEntries():
2124 if "--quiet" in myopts:
2125 print()
2126 - print(colorize("WARN", "!!!") + " existing preserved libs found")
2127 + print(colorize("WARN", "!!!!") + " existing preserved libs found")
2128 else:
2129 print()
2130 - print(colorize("WARN", "!!!") + " existing preserved libs:")
2131 + print(colorize("WARN", "!!!!") + " existing preserved libs:")
2132 display_preserved_libs(vardbapi, verbose="--verbose" in myopts)
2133 print(
2134 "Use "
2135 diff --git a/lib/_emerge/resolver/output_helpers.py b/lib/_emerge/resolver/output_helpers.py
2136 index f80b79ccf..3f42510cf 100644
2137 --- a/lib/_emerge/resolver/output_helpers.py
2138 +++ b/lib/_emerge/resolver/output_helpers.py
2139 @@ -203,9 +203,9 @@ class _DisplayConfig:
2140 try:
2141 mywidth = int(frozen_config.settings["COLUMNWIDTH"])
2142 except ValueError as e:
2143 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
2144 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
2145 writemsg(
2146 - "!!! Unable to parse COLUMNWIDTH='%s'\n"
2147 + "!!!! Unable to parse COLUMNWIDTH='%s'\n"
2148 % frozen_config.settings["COLUMNWIDTH"],
2149 noiselevel=-1,
2150 )
2151 diff --git a/lib/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py
2152 index 0b063b5f3..e5def035d 100644
2153 --- a/lib/_emerge/resolver/slot_collision.py
2154 +++ b/lib/_emerge/resolver/slot_collision.py
2155 @@ -250,11 +250,11 @@ class slot_conflict_handler:
2156 msg = self.conflict_msg
2157 indent = " "
2158 msg.append(
2159 - "\n!!! Multiple package instances within a single "
2160 + "\n!!!! Multiple package instances within a single "
2161 + "package slot have been pulled\n"
2162 )
2163 msg.append(
2164 - "!!! into the dependency graph, resulting" + " in a slot conflict:\n\n"
2165 + "!!!! into the dependency graph, resulting" + " in a slot conflict:\n\n"
2166 )
2167
2168 for root, slot_atom, pkgs in self.all_conflicts:
2169 @@ -366,7 +366,7 @@ class slot_conflict_handler:
2170 # above findAtomForPackage call to
2171 # return None unexpectedly.
2172 msg = (
2173 - "\n\n!!! BUG: Detected "
2174 + "\n\n!!!! BUG: Detected "
2175 "USE dep match inconsistency:\n"
2176 "\tppkg: %s\n"
2177 "\tviolated_atom: %s\n"
2178 @@ -729,12 +729,12 @@ class slot_conflict_handler:
2179
2180 if need_rebuild:
2181 msg.append(
2182 - "\n!!! The slot conflict(s) shown above involve package(s) which may need to\n"
2183 + "\n!!!! The slot conflict(s) shown above involve package(s) which may need to\n"
2184 )
2185 msg.append(
2186 - "!!! be rebuilt in order to solve the conflict(s). However, the following\n"
2187 + "!!!! be rebuilt in order to solve the conflict(s). However, the following\n"
2188 )
2189 - msg.append("!!! package(s) cannot be rebuilt for the reason(s) shown:\n\n")
2190 + msg.append("!!!! package(s) cannot be rebuilt for the reason(s) shown:\n\n")
2191 for ppkg, reason in need_rebuild.items():
2192 msg.append("%s%s: %s\n" % (indent, ppkg, reason))
2193 msg.append("\n")
2194 @@ -750,8 +750,8 @@ class slot_conflict_handler:
2195 if self.conflict_is_unspecific and not (
2196 "--newuse" in self.myopts and "--update" in self.myopts
2197 ):
2198 - msg += "!!! Enabling --newuse and --update might solve this conflict.\n"
2199 - msg += "!!! If not, it might help emerge to give a more specific suggestion.\n\n"
2200 + msg += "!!!! Enabling --newuse and --update might solve this conflict.\n"
2201 + msg += "!!!! If not, it might help emerge to give a more specific suggestion.\n\n"
2202 return msg
2203
2204 solutions = self.solutions
2205 diff --git a/lib/_emerge/show_invalid_depstring_notice.py b/lib/_emerge/show_invalid_depstring_notice.py
2206 index 0b01d157c..7736896f7 100644
2207 --- a/lib/_emerge/show_invalid_depstring_notice.py
2208 +++ b/lib/_emerge/show_invalid_depstring_notice.py
2209 @@ -11,7 +11,7 @@ from portage.util import writemsg_level
2210 def show_invalid_depstring_notice(parent_node, error_msg):
2211
2212 msg1 = (
2213 - "\n\n!!! Invalid or corrupt dependency specification: "
2214 + "\n\n!!!! Invalid or corrupt dependency specification: "
2215 + "\n\n%s\n\n%s\n\n" % (error_msg, parent_node)
2216 )
2217 p_key = parent_node.cpv
2218 diff --git a/lib/_emerge/unmerge.py b/lib/_emerge/unmerge.py
2219 index 81541cb4a..34e1e748b 100644
2220 --- a/lib/_emerge/unmerge.py
2221 +++ b/lib/_emerge/unmerge.py
2222 @@ -129,7 +129,7 @@ def _unmerge_display(
2223 candidate_catpkgs.append(x)
2224 elif unmerge_action in ["prune", "clean"]:
2225 print(
2226 - "\n!!! Prune and clean do not accept individual"
2227 + "\n!!!! Prune and clean do not accept individual"
2228 + " ebuilds as arguments;\n skipping.\n"
2229 )
2230 continue
2231 @@ -137,7 +137,7 @@ def _unmerge_display(
2232 # it appears that the user is specifying an installed
2233 # ebuild and we're in "unmerge" mode, so it's ok.
2234 if not os.path.exists(x):
2235 - print("\n!!! The path '" + x + "' doesn't exist.\n")
2236 + print("\n!!!! The path '" + x + "' doesn't exist.\n")
2237 return 1, {}
2238
2239 absx = os.path.abspath(x)
2240 @@ -154,7 +154,7 @@ def _unmerge_display(
2241 sp_vdb_len = len(sp_vdb)
2242
2243 if not os.path.exists(absx + "/CONTENTS"):
2244 - print("!!! Not a valid db dir: " + str(absx))
2245 + print("!!!! Not a valid db dir: " + str(absx))
2246 return 1, {}
2247
2248 if sp_absx_len <= sp_vdb_len:
2249 @@ -162,7 +162,9 @@ def _unmerge_display(
2250 print(sp_absx)
2251 print(absx)
2252 print(
2253 - "\n!!!", x, "cannot be inside " + vdb_path + "; aborting.\n"
2254 + "\n!!!!",
2255 + x,
2256 + "cannot be inside " + vdb_path + "; aborting.\n",
2257 )
2258 return 1, {}
2259
2260 @@ -171,7 +173,7 @@ def _unmerge_display(
2261 print(sp_absx)
2262 print(absx)
2263 print(
2264 - "\n!!!",
2265 + "\n!!!!",
2266 x,
2267 "is not inside " + vdb_path + "; aborting.\n",
2268 )
2269 @@ -187,14 +189,14 @@ def _unmerge_display(
2270 writemsg_level(
2271 darkgreen(
2272 newline
2273 - + ">>> Using system located in ROOT tree %s\n" % settings["ROOT"]
2274 + + ">>>> Using system located in ROOT tree %s\n" % settings["ROOT"]
2275 )
2276 )
2277
2278 if ("--pretend" in myopts or "--ask" in myopts) and not quiet:
2279 writemsg_level(
2280 darkgreen(
2281 - newline + ">>> These are the packages that would be unmerged:\n"
2282 + newline + ">>>> These are the packages that would be unmerged:\n"
2283 )
2284 )
2285
2286 @@ -211,12 +213,12 @@ def _unmerge_display(
2287 mymatch = vartree.dbapi.match(x)
2288 except portage.exception.AmbiguousPackageName as errpkgs:
2289 print(
2290 - '\n\n!!! The short ebuild name "'
2291 + '\n\n!!!! The short ebuild name "'
2292 + x
2293 + '" is ambiguous. Please specify'
2294 )
2295 print(
2296 - "!!! one of the following fully-qualified "
2297 + "!!!! one of the following fully-qualified "
2298 + "ebuild names instead:\n"
2299 )
2300 for i in errpkgs[0]:
2301 @@ -314,13 +316,13 @@ def _unmerge_display(
2302 numselected = len(all_selected)
2303 if global_unmerge and not numselected:
2304 portage.writemsg_stdout(
2305 - "\n>>> No outdated packages were found on your system.\n"
2306 + "\n>>>> No outdated packages were found on your system.\n"
2307 )
2308 return 1, {}
2309
2310 if not numselected:
2311 portage.writemsg_stdout(
2312 - "\n>>> No packages selected for removal by " + unmerge_action + "\n"
2313 + "\n>>>> No packages selected for removal by " + unmerge_action + "\n"
2314 )
2315 return 1, {}
2316 finally:
2317 @@ -456,7 +458,7 @@ def _unmerge_display(
2318 numselected = len(all_selected)
2319 if not numselected:
2320 writemsg_level(
2321 - "\n>>> No packages selected for removal by " + unmerge_action + "\n"
2322 + "\n>>>> No packages selected for removal by " + unmerge_action + "\n"
2323 )
2324 return 1, {}
2325
2326 @@ -512,14 +514,14 @@ def _unmerge_display(
2327 writemsg_level(
2328 colorize(
2329 "BAD",
2330 - "\n\n!!! " + "%s is part of your system profile.\n" % (cp_info,),
2331 + "\n\n!!!! " + "%s is part of your system profile.\n" % (cp_info,),
2332 ),
2333 level=logging.WARNING,
2334 noiselevel=-1,
2335 )
2336 writemsg_level(
2337 colorize(
2338 - "WARN", "!!! Unmerging it may " + "be damaging to your system.\n\n"
2339 + "WARN", "!!!! Unmerging it may " + "be damaging to your system.\n\n"
2340 ),
2341 level=logging.WARNING,
2342 noiselevel=-1,
2343 @@ -561,12 +563,12 @@ def _unmerge_display(
2344 )
2345
2346 writemsg_level(
2347 - "\n>>> "
2348 + "\n>>>> "
2349 + colorize("UNMERGE_WARN", "'Selected'")
2350 + " packages are slated for removal.\n"
2351 )
2352 writemsg_level(
2353 - ">>> "
2354 + ">>>> "
2355 + colorize("GOOD", "'Protected'")
2356 + " and "
2357 + colorize("GOOD", "'omitted'")
2358 @@ -633,7 +635,7 @@ def unmerge(
2359
2360 if not vartree.dbapi.writable:
2361 writemsg_level(
2362 - "!!! %s\n" % _("Read-only file system: %s") % vartree.dbapi._dbroot,
2363 + "!!!! %s\n" % _("Read-only file system: %s") % vartree.dbapi._dbroot,
2364 level=logging.ERROR,
2365 noiselevel=-1,
2366 )
2367 @@ -641,7 +643,7 @@ def unmerge(
2368
2369 # the real unmerging begins, after a short delay unless we're raging....
2370 if not unmerge_action == "rage-clean" and clean_delay and not autoclean:
2371 - countdown(int(settings["CLEAN_DELAY"]), ">>> Unmerging")
2372 + countdown(int(settings["CLEAN_DELAY"]), ">>>> Unmerging")
2373
2374 all_selected = set()
2375 all_selected.update(*[x["selected"] for x in pkgmap])
2376 @@ -653,7 +655,7 @@ def unmerge(
2377 for x in range(len(pkgmap)):
2378 for y in pkgmap[x]["selected"]:
2379 emergelog(xterm_titles, "=== Unmerging... (" + y + ")")
2380 - message = ">>> Unmerging ({0} of {1}) {2}...\n".format(
2381 + message = ">>>> Unmerging ({0} of {1}) {2}...\n".format(
2382 colorize("MERGE_LIST_PROGRESS", str(curval)),
2383 colorize("MERGE_LIST_PROGRESS", str(maxval)),
2384 y,
2385 @@ -673,7 +675,7 @@ def unmerge(
2386 )
2387
2388 if retval != os.EX_OK:
2389 - emergelog(xterm_titles, " !!! unmerge FAILURE: " + y)
2390 + emergelog(xterm_titles, " !!!! unmerge FAILURE: " + y)
2391 if raise_on_error:
2392 raise UninstallFailure(retval)
2393 sys.exit(retval)
2394 @@ -688,7 +690,7 @@ def unmerge(
2395 sets["selected"].load()
2396 sets["selected"].cleanPackage(vartree.dbapi, y)
2397 sets["selected"].unlock()
2398 - emergelog(xterm_titles, " >>> unmerge success: " + y)
2399 + emergelog(xterm_titles, " >>>> unmerge success: " + y)
2400
2401 if (
2402 clean_world
2403 diff --git a/lib/portage/__init__.py b/lib/portage/__init__.py
2404 index 13af8da09..02799eba9 100644
2405 --- a/lib/portage/__init__.py
2406 +++ b/lib/portage/__init__.py
2407 @@ -33,20 +33,20 @@ try:
2408 except ImportError as e:
2409 sys.stderr.write("\n\n")
2410 sys.stderr.write(
2411 - "!!! Failed to complete python imports. These are internal modules for\n"
2412 + "!!!! Failed to complete python imports. These are internal modules for\n"
2413 )
2414 sys.stderr.write(
2415 - "!!! python and failure here indicates that you have a problem with python\n"
2416 + "!!!! python and failure here indicates that you have a problem with python\n"
2417 )
2418 sys.stderr.write(
2419 - "!!! itself and thus portage is not able to continue processing.\n\n"
2420 + "!!!! itself and thus portage is not able to continue processing.\n\n"
2421 )
2422
2423 sys.stderr.write(
2424 - "!!! You might consider starting python with verbose flags to see what has\n"
2425 + "!!!! You might consider starting python with verbose flags to see what has\n"
2426 )
2427 sys.stderr.write(
2428 - "!!! gone wrong. Here is the information we got for this exception:\n"
2429 + "!!!! gone wrong. Here is the information we got for this exception:\n"
2430 )
2431 sys.stderr.write(" " + str(e) + "\n\n")
2432 raise
2433 @@ -168,21 +168,21 @@ try:
2434 except ImportError as e:
2435 sys.stderr.write("\n\n")
2436 sys.stderr.write(
2437 - "!!! Failed to complete portage imports. There are internal modules for\n"
2438 + "!!!! Failed to complete portage imports. There are internal modules for\n"
2439 )
2440 sys.stderr.write(
2441 - "!!! portage and failure here indicates that you have a problem with your\n"
2442 + "!!!! portage and failure here indicates that you have a problem with your\n"
2443 )
2444 sys.stderr.write(
2445 - "!!! installation of portage. Please try a rescue portage located in the ebuild\n"
2446 + "!!!! installation of portage. Please try a rescue portage located in the ebuild\n"
2447 )
2448 sys.stderr.write(
2449 - "!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
2450 + "!!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
2451 )
2452 sys.stderr.write(
2453 - "!!! There is a README.RESCUE file that details the steps required to perform\n"
2454 + "!!!! There is a README.RESCUE file that details the steps required to perform\n"
2455 )
2456 - sys.stderr.write("!!! a recovery of portage.\n")
2457 + sys.stderr.write("!!!! a recovery of portage.\n")
2458 sys.stderr.write(" " + str(e) + "\n\n")
2459 raise
2460
2461 @@ -408,7 +408,7 @@ try:
2462 _selinux_merge = _unicode_module_wrapper(_selinux, encoding=_encodings["merge"])
2463 except (ImportError, OSError) as e:
2464 if isinstance(e, OSError):
2465 - sys.stderr.write("!!! SELinux not loaded: %s\n" % str(e))
2466 + sys.stderr.write("!!!! SELinux not loaded: %s\n" % str(e))
2467 del e
2468 _selinux = None
2469 selinux = None
2470 diff --git a/lib/portage/_selinux.py b/lib/portage/_selinux.py
2471 index d05d6b8e7..460cbd8e1 100644
2472 --- a/lib/portage/_selinux.py
2473 +++ b/lib/portage/_selinux.py