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
2474 @@ -98,14 +98,14 @@ def setexec(ctx="\n"):
2475 if selinux.security_getenforce() == 1:
2476 raise OSError(msg)
2477 else:
2478 - portage.writemsg("!!! %s\n" % msg, noiselevel=-1)
2479 + portage.writemsg("!!!! %s\n" % msg, noiselevel=-1)
2480
2481 if rc < 0:
2482 if selinux.security_getenforce() == 1:
2483 raise OSError(_('Failed setting exec() context "%s".') % ctx)
2484 else:
2485 portage.writemsg(
2486 - "!!! " + _('Failed setting exec() context "%s".') % ctx, noiselevel=-1
2487 + "!!!! " + _('Failed setting exec() context "%s".') % ctx, noiselevel=-1
2488 )
2489
2490
2491 diff --git a/lib/portage/_sets/shell.py b/lib/portage/_sets/shell.py
2492 index 249e1fb05..e82fe031b 100644
2493 --- a/lib/portage/_sets/shell.py
2494 +++ b/lib/portage/_sets/shell.py
2495 @@ -15,7 +15,7 @@ class CommandOutputSet(PackageSet):
2496 """This class creates a PackageSet from the output of a shell command.
2497 The shell command should produce one atom per line, that is:
2498
2499 - >>> atom1
2500 + >>>> atom1
2501 atom2
2502 ...
2503 atomN
2504 diff --git a/lib/portage/binrepo/config.py b/lib/portage/binrepo/config.py
2505 index 8024f24d7..3bbc4651e 100644
2506 --- a/lib/portage/binrepo/config.py
2507 +++ b/lib/portage/binrepo/config.py
2508 @@ -58,7 +58,7 @@ class BinRepoConfigLoader(Mapping):
2509 parser = self._parse(paths, parser_defaults)
2510 except ConfigParserError as e:
2511 writemsg(
2512 - _("!!! Error while reading binrepo config file: %s\n") % e,
2513 + _("!!!! Error while reading binrepo config file: %s\n") % e,
2514 noiselevel=-1,
2515 )
2516 parser = SafeConfigParser(defaults=parser_defaults)
2517 @@ -71,7 +71,7 @@ class BinRepoConfigLoader(Mapping):
2518 repo = BinRepoConfig(repo_data)
2519 if repo.sync_uri is None:
2520 writemsg(
2521 - _("!!! Missing sync-uri setting for binrepo %s\n") % (repo.name,),
2522 + _("!!!! Missing sync-uri setting for binrepo %s\n") % (repo.name,),
2523 noiselevel=-1,
2524 )
2525 continue
2526 diff --git a/lib/portage/data.py b/lib/portage/data.py
2527 index 09a4dd079..0e6abdd70 100644
2528 --- a/lib/portage/data.py
2529 +++ b/lib/portage/data.py
2530 @@ -37,7 +37,7 @@ if not lchown:
2531
2532 def lchown(*_args, **_kwargs):
2533 writemsg(
2534 - colorize("BAD", "!!!")
2535 + colorize("BAD", "!!!!")
2536 + _(
2537 " It seems that os.lchown does not"
2538 " exist. Please rebuild python.\n"
2539 diff --git a/lib/portage/dbapi/__init__.py b/lib/portage/dbapi/__init__.py
2540 index 717ab95d5..449751013 100644
2541 --- a/lib/portage/dbapi/__init__.py
2542 +++ b/lib/portage/dbapi/__init__.py
2543 @@ -375,7 +375,7 @@ class dbapi:
2544 noiselevel=-1,
2545 )
2546 else:
2547 - writemsg("!!! Invalid db entry: %s\n" % mypath, noiselevel=-1)
2548 + writemsg("!!!! Invalid db entry: %s\n" % mypath, noiselevel=-1)
2549
2550 def update_ents(self, updates, onProgress=None, onUpdate=None):
2551 """
2552 diff --git a/lib/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py
2553 index 777fc4918..2d1fbbecf 100644
2554 --- a/lib/portage/dbapi/bintree.py
2555 +++ b/lib/portage/dbapi/bintree.py
2556 @@ -589,15 +589,15 @@ class binarytree:
2557
2558 if (mynewpkg != myoldpkg) and self.dbapi.cpv_exists(mynewcpv):
2559 writemsg(
2560 - _("!!! Cannot update binary: Destination exists.\n"), noiselevel=-1
2561 + _("!!!! Cannot update binary: Destination exists.\n"), noiselevel=-1
2562 )
2563 - writemsg("!!! " + mycpv + " -> " + mynewcpv + "\n", noiselevel=-1)
2564 + writemsg("!!!! " + mycpv + " -> " + mynewcpv + "\n", noiselevel=-1)
2565 continue
2566
2567 tbz2path = self.getname(mycpv)
2568 if os.path.exists(tbz2path) and not os.access(tbz2path, os.W_OK):
2569 writemsg(
2570 - _("!!! Cannot update readonly binary: %s\n") % mycpv, noiselevel=-1
2571 + _("!!!! Cannot update readonly binary: %s\n") % mycpv, noiselevel=-1
2572 )
2573 continue
2574
2575 @@ -760,7 +760,7 @@ class binarytree:
2576 if not self._binrepos_conf:
2577 writemsg(
2578 _(
2579 - "!!! %s is missing (or PORTAGE_BINHOST is unset), but use is requested.\n"
2580 + "!!!! %s is missing (or PORTAGE_BINHOST is unset), but use is requested.\n"
2581 )
2582 % (config_path,),
2583 noiselevel=-1,
2584 @@ -885,7 +885,10 @@ class binarytree:
2585 continue
2586 if not os.access(full_path, os.R_OK):
2587 writemsg(
2588 - _("!!! Permission denied to read " "binary package: '%s'\n")
2589 + _(
2590 + "!!!! Permission denied to read "
2591 + "binary package: '%s'\n"
2592 + )
2593 % full_path,
2594 noiselevel=-1,
2595 )
2596 @@ -903,7 +906,7 @@ class binarytree:
2597 if not mycat or not mypf or not slot:
2598 # old-style or corrupt package
2599 writemsg(
2600 - _("\n!!! Invalid binary package: '%s'\n") % full_path,
2601 + _("\n!!!! Invalid binary package: '%s'\n") % full_path,
2602 noiselevel=-1,
2603 )
2604 missing_keys = []
2605 @@ -927,7 +930,7 @@ class binarytree:
2606 )
2607 )
2608 for line in textwrap.wrap("".join(msg), 72):
2609 - writemsg("!!! %s\n" % line, noiselevel=-1)
2610 + writemsg("!!!! %s\n" % line, noiselevel=-1)
2611 self.invalids.append(mypkg)
2612 continue
2613
2614 @@ -948,7 +951,7 @@ class binarytree:
2615
2616 if invalid_name:
2617 writemsg(
2618 - _("\n!!! Binary package name is " "invalid: '%s'\n")
2619 + _("\n!!!! Binary package name is " "invalid: '%s'\n")
2620 % full_path,
2621 noiselevel=-1,
2622 )
2623 @@ -959,7 +962,7 @@ class binarytree:
2624 build_id = int(pkg_metadata["BUILD_ID"])
2625 except ValueError:
2626 writemsg(
2627 - _("!!! Binary package has " "invalid BUILD_ID: '%s'\n")
2628 + _("!!!! Binary package has " "invalid BUILD_ID: '%s'\n")
2629 % full_path,
2630 noiselevel=-1,
2631 )
2632 @@ -982,7 +985,7 @@ class binarytree:
2633 if not self.dbapi._category_re.match(mycat):
2634 writemsg(
2635 _(
2636 - "!!! Binary package has an "
2637 + "!!!! Binary package has an "
2638 "unrecognized category: '%s'\n"
2639 )
2640 % full_path,
2641 @@ -990,7 +993,7 @@ class binarytree:
2642 )
2643 writemsg(
2644 _(
2645 - "!!! '%s' has a category that is not"
2646 + "!!!! '%s' has a category that is not"
2647 " listed in %setc/portage/categories\n"
2648 )
2649 % (mycpv, self.settings["PORTAGE_CONFIGROOT"]),
2650 @@ -1035,7 +1038,7 @@ class binarytree:
2651 self._eval_use_flags(mycpv, d)
2652 except portage.exception.InvalidDependString:
2653 writemsg(
2654 - _("!!! Invalid binary package: '%s'\n")
2655 + _("!!!! Invalid binary package: '%s'\n")
2656 % self.getname(mycpv),
2657 noiselevel=-1,
2658 )
2659 @@ -1251,7 +1254,7 @@ class binarytree:
2660 pkgindex = None
2661 writemsg(
2662 _(
2663 - "\n\n!!! Binhost package index "
2664 + "\n\n!!!! Binhost package index "
2665 " has no TIMESTAMP field.\n"
2666 ),
2667 noiselevel=-1,
2668 @@ -1260,7 +1263,7 @@ class binarytree:
2669 if not self._pkgindex_version_supported(rmt_idx):
2670 writemsg(
2671 _(
2672 - "\n\n!!! Binhost package index version"
2673 + "\n\n!!!! Binhost package index version"
2674 " is not supported: '%s'\n"
2675 )
2676 % rmt_idx.header.get("VERSION"),
2677 @@ -1281,7 +1284,7 @@ class binarytree:
2678 AlarmSignal.unregister()
2679 except AlarmSignal:
2680 writemsg(
2681 - "\n\n!!! %s\n"
2682 + "\n\n!!!! %s\n"
2683 % _("Timed out while closing connection to binhost"),
2684 noiselevel=-1,
2685 )
2686 @@ -1299,7 +1302,7 @@ class binarytree:
2687 # This includes URLError which is raised for SSL
2688 # certificate errors when PEP 476 is supported.
2689 writemsg(
2690 - _("\n\n!!! Error fetching binhost package" " info from '%s'\n")
2691 + _("\n\n!!!! Error fetching binhost package" " info from '%s'\n")
2692 % _hide_url_passwd(base_url)
2693 )
2694 # With Python 2, the EnvironmentError message may
2695 @@ -1309,7 +1312,7 @@ class binarytree:
2696 error_msg = str(e)
2697 except UnicodeDecodeError as uerror:
2698 error_msg = str(uerror.object, encoding="utf_8", errors="replace")
2699 - writemsg("!!! %s\n\n" % error_msg)
2700 + writemsg("!!!! %s\n\n" % error_msg)
2701 del e
2702 pkgindex = None
2703 if proc is not None:
2704 @@ -1403,7 +1406,7 @@ class binarytree:
2705 raise
2706 del e
2707 writemsg(
2708 - _("!!! Binary package does not exist: '%s'\n") % full_path,
2709 + _("!!!! Binary package does not exist: '%s'\n") % full_path,
2710 noiselevel=-1,
2711 )
2712 return
2713 @@ -1414,7 +1417,9 @@ class binarytree:
2714 except portage.exception.InvalidDependString:
2715 invalid_depend = True
2716 if invalid_depend or not metadata.get("SLOT"):
2717 - writemsg(_("!!! Invalid binary package: '%s'\n") % full_path, noiselevel=-1)
2718 + writemsg(
2719 + _("!!!! Invalid binary package: '%s'\n") % full_path, noiselevel=-1
2720 + )
2721 return
2722
2723 fetched = False
2724 @@ -2008,7 +2013,7 @@ class binarytree:
2725 digests["size"] = int(metadata["SIZE"])
2726 except ValueError:
2727 writemsg(
2728 - _("!!! Malformed SIZE attribute in remote " "metadata for '%s'\n")
2729 + _("!!!! Malformed SIZE attribute in remote " "metadata for '%s'\n")
2730 % cpv
2731 )
2732
2733 diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
2734 index 93f3fee2f..11cff1b3f 100644
2735 --- a/lib/portage/dbapi/porttree.py
2736 +++ b/lib/portage/dbapi/porttree.py
2737 @@ -599,10 +599,10 @@ class portdbapi(dbapi):
2738 ebuild_hash.mtime
2739 except FileNotFound:
2740 writemsg(
2741 - _("!!! aux_get(): ebuild for " "'%s' does not exist at:\n") % (cpv,),
2742 + _("!!!! aux_get(): ebuild for " "'%s' does not exist at:\n") % (cpv,),
2743 noiselevel=-1,
2744 )
2745 - writemsg("!!! %s\n" % ebuild_path, noiselevel=-1)
2746 + writemsg("!!!! %s\n" % ebuild_path, noiselevel=-1)
2747 raise PortageKeyError(cpv)
2748
2749 # Pull pre-generated metadata from the metadata/cache/
2750 @@ -723,7 +723,7 @@ class portdbapi(dbapi):
2751
2752 if not myebuild:
2753 writemsg(
2754 - "!!! aux_get(): %s\n" % _("ebuild not found for '%s'") % mycpv,
2755 + "!!!! aux_get(): %s\n" % _("ebuild not found for '%s'") % mycpv,
2756 noiselevel=1,
2757 )
2758 future.set_exception(PortageKeyError(mycpv))
2759 @@ -1161,7 +1161,7 @@ class portdbapi(dbapi):
2760 if invalid_category and mylist:
2761 writemsg(
2762 _(
2763 - "\n!!! '%s' has a category that is not listed in "
2764 + "\n!!!! '%s' has a category that is not listed in "
2765 "%setc/portage/categories\n"
2766 )
2767 % (mycp, self.settings["PORTAGE_CONFIGROOT"]),
2768 @@ -1436,10 +1436,10 @@ class portdbapi(dbapi):
2769 continue
2770 except PortageException as e:
2771 writemsg(
2772 - "!!! Error: aux_get('%s', %s)\n" % (mycpv, aux_keys),
2773 + "!!!! Error: aux_get('%s', %s)\n" % (mycpv, aux_keys),
2774 noiselevel=-1,
2775 )
2776 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
2777 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
2778 del e
2779 continue
2780
2781 diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
2782 index 8ffb23b1c..2f8fbddd1 100644
2783 --- a/lib/portage/dbapi/vartree.py
2784 +++ b/lib/portage/dbapi/vartree.py
2785 @@ -721,7 +721,7 @@ class vardbapi(dbapi):
2786 pass
2787 else:
2788 writemsg(
2789 - _("!!! Error loading '%s': %s\n") % (self._aux_cache_filename, e),
2790 + _("!!!! Error loading '%s': %s\n") % (self._aux_cache_filename, e),
2791 noiselevel=-1,
2792 )
2793 del e
2794 @@ -1167,19 +1167,19 @@ class vardbapi(dbapi):
2795 counter = int(f.readline().strip())
2796 except (OverflowError, ValueError) as e:
2797 writemsg(
2798 - _("!!! COUNTER file is corrupt: '%s'\n") % self._counter_path,
2799 + _("!!!! COUNTER file is corrupt: '%s'\n") % self._counter_path,
2800 noiselevel=-1,
2801 )
2802 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
2803 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
2804 except EnvironmentError as e:
2805 # Silently allow ENOENT since files under
2806 # /var/cache/ are allowed to disappear.
2807 if e.errno != errno.ENOENT:
2808 writemsg(
2809 - _("!!! Unable to read COUNTER file: '%s'\n") % self._counter_path,
2810 + _("!!!! Unable to read COUNTER file: '%s'\n") % self._counter_path,
2811 noiselevel=-1,
2812 )
2813 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
2814 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
2815 del e
2816
2817 if self._cached_counter == counter:
2818 @@ -2100,9 +2100,9 @@ class dblink:
2819 pkgfiles[path] = data
2820
2821 if errors:
2822 - writemsg(_("!!! Parse error in '%s'\n") % contents_file, noiselevel=-1)
2823 + writemsg(_("!!!! Parse error in '%s'\n") % contents_file, noiselevel=-1)
2824 for pos, e in errors:
2825 - writemsg(_("!!! line %d: %s\n") % (pos, e), noiselevel=-1)
2826 + writemsg(_("!!!! line %d: %s\n") % (pos, e), noiselevel=-1)
2827 self.contentscache = pkgfiles
2828 return pkgfiles
2829
2830 @@ -2211,7 +2211,7 @@ class dblink:
2831 continue
2832 obj_type = self.getcontents()[contents_key][0]
2833 self._display_merge(
2834 - _(">>> needed %s %s\n") % (obj_type, contents_key),
2835 + _(">>>> needed %s %s\n") % (obj_type, contents_key),
2836 noiselevel=-1,
2837 )
2838 plib_registry.register(
2839 @@ -2401,7 +2401,7 @@ class dblink:
2840 retval = self._pre_unmerge_backup(background)
2841 if retval != os.EX_OK:
2842 showMessage(
2843 - _("!!! FAILED prerm: quickpkg: %s\n") % retval,
2844 + _("!!!! FAILED prerm: quickpkg: %s\n") % retval,
2845 level=logging.ERROR,
2846 noiselevel=-1,
2847 )
2848 @@ -2417,7 +2417,7 @@ class dblink:
2849 # Sometimes this happens due to corruption of the EAPI file.
2850 failures += 1
2851 showMessage(
2852 - _("!!! FAILED prerm: %s\n") % os.path.join(self.dbdir, "EAPI"),
2853 + _("!!!! FAILED prerm: %s\n") % os.path.join(self.dbdir, "EAPI"),
2854 level=logging.ERROR,
2855 noiselevel=-1,
2856 )
2857 @@ -2438,7 +2438,7 @@ class dblink:
2858 if retval != os.EX_OK:
2859 failures += 1
2860 showMessage(
2861 - _("!!! FAILED prerm: %s\n") % retval,
2862 + _("!!!! FAILED prerm: %s\n") % retval,
2863 level=logging.ERROR,
2864 noiselevel=-1,
2865 )
2866 @@ -2465,7 +2465,7 @@ class dblink:
2867 if retval != os.EX_OK:
2868 failures += 1
2869 showMessage(
2870 - _("!!! FAILED postrm: %s\n") % retval,
2871 + _("!!!! FAILED postrm: %s\n") % retval,
2872 level=logging.ERROR,
2873 noiselevel=-1,
2874 )
2875 @@ -2972,7 +2972,7 @@ class dblink:
2876 if e.errno not in ignored_unlink_errnos:
2877 raise
2878 del e
2879 - show_unmerge("!!!", "", file_type, obj)
2880 + show_unmerge("!!!!", "", file_type, obj)
2881 elif pkgfiles[objkey][0] == "obj":
2882 if statobj is None or not stat.S_ISREG(statobj.st_mode):
2883 show_unmerge("---", unmerge_desc["!obj"], file_type, obj)
2884 @@ -3137,7 +3137,7 @@ class dblink:
2885 if e.errno not in ignored_unlink_errnos:
2886 raise
2887 del e
2888 - show_unmerge("!!!", "", "sym", obj)
2889 + show_unmerge("!!!!", "", "sym", obj)
2890
2891 protected_symlinks.clear()
2892 self._unmerge_dirs(
2893 @@ -3188,7 +3188,7 @@ class dblink:
2894 if e.errno not in ignored_unlink_errnos:
2895 raise
2896 del e
2897 - show_unmerge("!!!", "", "obj", child)
2898 + show_unmerge("!!!!", "", "obj", child)
2899
2900 try:
2901 parent_name = os.path.dirname(obj)
2902 @@ -3254,7 +3254,7 @@ class dblink:
2903 if e.errno not in ignored_unlink_errnos:
2904 raise
2905 del e
2906 - show_unmerge("!!!", "", "sym", obj)
2907 + show_unmerge("!!!!", "", "sym", obj)
2908 else:
2909 parents.append(os.path.dirname(obj))
2910
2911 @@ -3483,7 +3483,7 @@ class dblink:
2912 self._linkmap_broken = True
2913 self._display_merge(
2914 _(
2915 - "!!! Disabling preserve-libs "
2916 + "!!!! Disabling preserve-libs "
2917 "due to error: Command Not Found: %s\n"
2918 )
2919 % (e,),
2920 @@ -3658,7 +3658,7 @@ class dblink:
2921 # it shouldn't be preserved here.
2922 showMessage(
2923 _(
2924 - "!!! File '%s' will not be preserved "
2925 + "!!!! File '%s' will not be preserved "
2926 "due to missing contents entry\n"
2927 )
2928 % (f_abs,),
2929 @@ -3669,7 +3669,7 @@ class dblink:
2930 continue
2931 new_contents[f_abs] = contents_entry
2932 obj_type = contents_entry[0]
2933 - showMessage(_(">>> needed %s %s\n") % (obj_type, f_abs), noiselevel=-1)
2934 + showMessage(_(">>>> needed %s %s\n") % (obj_type, f_abs), noiselevel=-1)
2935 # Add parent directories to contents if necessary.
2936 parent_dir = os.path.dirname(f_abs)
2937 while len(parent_dir) > len(root):
2938 @@ -3795,8 +3795,8 @@ class dblink:
2939 # registry, but the actual lib it points to is not.
2940 self._display_merge(
2941 _(
2942 - "!!! symlink to lib is preserved, "
2943 - "but not the lib itself:\n!!! '%s'\n"
2944 + "!!!! symlink to lib is preserved, "
2945 + "but not the lib itself:\n!!!! '%s'\n"
2946 )
2947 % (obj,),
2948 level=logging.ERROR,
2949 @@ -4271,7 +4271,7 @@ class dblink:
2950
2951 if not os.path.isdir(srcroot):
2952 showMessage(
2953 - _("!!! Directory Not Found: D='%s'\n") % srcroot,
2954 + _("!!!! Directory Not Found: D='%s'\n") % srcroot,
2955 level=logging.ERROR,
2956 noiselevel=-1,
2957 )
2958 @@ -4287,7 +4287,7 @@ class dblink:
2959 )
2960 phase.start()
2961 if phase.wait() != os.EX_OK:
2962 - showMessage(_("!!! instprep failed\n"), level=logging.ERROR, noiselevel=-1)
2963 + showMessage(_("!!!! instprep failed\n"), level=logging.ERROR, noiselevel=-1)
2964 return 1
2965
2966 is_binpkg = self.settings.get("EMERGE_FROM") == "binary"
2967 @@ -4318,7 +4318,7 @@ class dblink:
2968 slot = self.settings.get(var_name, "")
2969 if not slot.strip():
2970 showMessage(
2971 - _("!!! SLOT is undefined\n"),
2972 + _("!!!! SLOT is undefined\n"),
2973 level=logging.ERROR,
2974 noiselevel=-1,
2975 )
2976 @@ -4920,7 +4920,7 @@ class dblink:
2977 rval = self._pre_merge_backup(self._installed_instance, downgrade)
2978 if rval != os.EX_OK:
2979 showMessage(
2980 - _("!!! FAILED preinst: ") + "quickpkg: %s\n" % rval,
2981 + _("!!!! FAILED preinst: ") + "quickpkg: %s\n" % rval,
2982 level=logging.ERROR,
2983 noiselevel=-1,
2984 )
2985 @@ -4928,7 +4928,7 @@ class dblink:
2986
2987 # run preinst script
2988 showMessage(
2989 - _(">>> Merging %(cpv)s to %(destroot)s\n")
2990 + _(">>>> Merging %(cpv)s to %(destroot)s\n")
2991 % {"cpv": self.mycpv, "destroot": destroot}
2992 )
2993 phase = EbuildPhase(
2994 @@ -4943,7 +4943,7 @@ class dblink:
2995 # XXX: Decide how to handle failures here.
2996 if a != os.EX_OK:
2997 showMessage(
2998 - _("!!! FAILED preinst: ") + str(a) + "\n",
2999 + _("!!!! FAILED preinst: ") + str(a) + "\n",
3000 level=logging.ERROR,
3001 noiselevel=-1,
3002 )
3003 @@ -5058,7 +5058,7 @@ class dblink:
3004 autoclean = self.settings.get("AUTOCLEAN", "yes") == "yes" or preserve_paths
3005
3006 if autoclean:
3007 - emerge_log(_(" >>> AUTOCLEAN: %s") % (slot_atom,))
3008 + emerge_log(_(" >>>> AUTOCLEAN: %s") % (slot_atom,))
3009
3010 others_in_slot.append(self) # self has just been merged
3011 for dblnk in list(others_in_slot):
3012 @@ -5066,7 +5066,7 @@ class dblink:
3013 continue
3014 if not (autoclean or dblnk.mycpv == self.mycpv or reinstall_self):
3015 continue
3016 - showMessage(_(">>> Safely unmerging already-installed instance...\n"))
3017 + showMessage(_(">>>> Safely unmerging already-installed instance...\n"))
3018 emerge_log(_(" === Unmerging... (%s)") % (dblnk.mycpv,))
3019 others_in_slot.remove(dblnk) # dblnk will unmerge itself now
3020 dblnk._linkmap_broken = self._linkmap_broken
3021 @@ -5083,9 +5083,9 @@ class dblink:
3022 dblnk.settings.pop("REPLACED_BY_VERSION", None)
3023
3024 if unmerge_rval == os.EX_OK:
3025 - emerge_log(_(" >>> unmerge success: %s") % (dblnk.mycpv,))
3026 + emerge_log(_(" >>>> unmerge success: %s") % (dblnk.mycpv,))
3027 else:
3028 - emerge_log(_(" !!! unmerge FAILURE: %s") % (dblnk.mycpv,))
3029 + emerge_log(_(" !!!! unmerge FAILURE: %s") % (dblnk.mycpv,))
3030
3031 self.lockdb()
3032 try:
3033 @@ -5093,7 +5093,7 @@ class dblink:
3034 dblnk.delete()
3035 finally:
3036 self.unlockdb()
3037 - showMessage(_(">>> Original instance of package unmerged safely.\n"))
3038 + showMessage(_(">>>> Original instance of package unmerged safely.\n"))
3039
3040 if len(others_in_slot) > 1:
3041 showMessage(
3042 @@ -5221,7 +5221,7 @@ class dblink:
3043 phase.start()
3044 a = phase.wait()
3045 if a == os.EX_OK:
3046 - showMessage(_(">>> %s merged.\n") % self.mycpv)
3047 + showMessage(_(">>>> %s merged.\n") % self.mycpv)
3048 finally:
3049 self.settings.pop("PORTAGE_UPDATE_ENV", None)
3050
3051 @@ -5533,7 +5533,7 @@ class dblink:
3052 mydest_link,
3053 )
3054
3055 - zing = "!!!"
3056 + zing = "!!!!"
3057 if not moveme:
3058 # confmem rejected this update
3059 zing = "---"
3060 @@ -5582,7 +5582,7 @@ class dblink:
3061 continue
3062 # unlinking no longer necessary; "movefile" will overwrite symlinks atomically and correctly
3063 if moveme:
3064 - zing = ">>>"
3065 + zing = ">>>>"
3066 mymtime = movefile(
3067 mysrc,
3068 mydest,
3069 @@ -5625,12 +5625,12 @@ class dblink:
3070 )
3071 else:
3072 showMessage(
3073 - _("!!! Failed to move file.\n"),
3074 + _("!!!! Failed to move file.\n"),
3075 level=logging.ERROR,
3076 noiselevel=-1,
3077 )
3078 showMessage(
3079 - "!!! %s -> %s\n" % (mydest, myto),
3080 + "!!!! %s -> %s\n" % (mydest, myto),
3081 level=logging.ERROR,
3082 noiselevel=-1,
3083 )
3084 @@ -5649,20 +5649,20 @@ class dblink:
3085 if not stat.S_ISLNK(mydmode) and not os.access(mydest, os.W_OK):
3086 pkgstuff = pkgsplit(self.pkg)
3087 writemsg(
3088 - _("\n!!! Cannot write to '%s'.\n") % mydest, noiselevel=-1
3089 + _("\n!!!! Cannot write to '%s'.\n") % mydest, noiselevel=-1
3090 )
3091 writemsg(
3092 _(
3093 - "!!! Please check permissions and directories for broken symlinks.\n"
3094 + "!!!! Please check permissions and directories for broken symlinks.\n"
3095 )
3096 )
3097 writemsg(
3098 _(
3099 - "!!! You may start the merge process again by using ebuild:\n"
3100 + "!!!! You may start the merge process again by using ebuild:\n"
3101 )
3102 )
3103 writemsg(
3104 - "!!! ebuild "
3105 + "!!!! ebuild "
3106 + self.settings["PORTDIR"]
3107 + "/"
3108 + self.cat
3109 @@ -5672,7 +5672,7 @@ class dblink:
3110 + self.pkg
3111 + ".ebuild merge\n"
3112 )
3113 - writemsg(_("!!! And finish by running this: env-update\n\n"))
3114 + writemsg(_("!!!! And finish by running this: env-update\n\n"))
3115 return 1
3116
3117 if stat.S_ISDIR(mydmode) or (
3118 @@ -5732,7 +5732,7 @@ class dblink:
3119 bsd_chflags.lchflags(mydest, dflags)
3120 os.chmod(mydest, mystat[0])
3121 os.chown(mydest, mystat[4], mystat[5])
3122 - showMessage(">>> %s/\n" % mydest)
3123 + showMessage(">>>> %s/\n" % mydest)
3124 else:
3125 try:
3126 # destination doesn't exist
3127 @@ -5753,7 +5753,7 @@ class dblink:
3128 del e
3129 os.chmod(mydest, mystat[0])
3130 os.chown(mydest, mystat[4], mystat[5])
3131 - showMessage(">>> %s/\n" % mydest)
3132 + showMessage(">>>> %s/\n" % mydest)
3133
3134 try:
3135 self._merged_path(mydest, os.lstat(mydest))
3136 @@ -5810,7 +5810,7 @@ class dblink:
3137 if mymtime is None:
3138 return 1
3139 hardlink_candidates.append(mydest)
3140 - zing = ">>>"
3141 + zing = ">>>>"
3142
3143 try:
3144 self._merged_path(mydest, os.lstat(mydest))
3145 @@ -5829,7 +5829,7 @@ class dblink:
3146 showMessage("%s %s\n" % (zing, mydest))
3147 else:
3148 # we are merging a fifo or device node
3149 - zing = "!!!"
3150 + zing = "!!!!"
3151 if mydmode is None:
3152 # destination doesn't exist
3153 if (
3154 @@ -5843,7 +5843,7 @@ class dblink:
3155 )
3156 is not None
3157 ):
3158 - zing = ">>>"
3159 + zing = ">>>>"
3160
3161 try:
3162 self._merged_path(mydest, os.lstat(mydest))
3163 diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
3164 index 3b3577025..727915bbe 100644
3165 --- a/lib/portage/dep/__init__.py
3166 +++ b/lib/portage/dep/__init__.py
3167 @@ -254,9 +254,9 @@ def _get_useflag_re(eapi):
3168 def cpvequal(cpv1, cpv2):
3169 """
3170 Example Usage:
3171 - >>> from portage.dep import cpvequal
3172 - >>> cpvequal("sys-apps/portage-2.1","sys-apps/portage-2.1")
3173 - >>> True
3174 + >>>> from portage.dep import cpvequal
3175 + >>>> cpvequal("sys-apps/portage-2.1","sys-apps/portage-2.1")
3176 + >>>> True
3177
3178 @param cpv1: CategoryPackageVersion (no operators) Example: "sys-apps/portage-2.1"
3179 @type cpv1: String
3180 @@ -317,7 +317,7 @@ def paren_reduce(mystr, _deprecation_warn=True):
3181 split the list elements by spaces. All redundant brackets are removed.
3182
3183 Example usage:
3184 - >>> paren_reduce('foobar foo? ( bar baz )')
3185 + >>>> paren_reduce('foobar foo? ( bar baz )')
3186 ['foobar', 'foo?', ['bar', 'baz']]
3187
3188 @param mystr: The string to reduce
3189 @@ -484,8 +484,8 @@ def paren_enclose(mylist, unevaluated_atom=False, opconvert=False):
3190 @return: The paren enclosed string
3191
3192 Example usage:
3193 - >>> test = ['foobar','foo',['bar','baz']]
3194 - >>> paren_enclose(test)
3195 + >>>> test = ['foobar','foo',['bar','baz']]
3196 + >>>> paren_enclose(test)
3197 'foobar foo ( bar baz )'
3198 """
3199 mystrparts = []
3200 @@ -989,8 +989,8 @@ def dep_opconvert(deplist):
3201 list of deps that follows..
3202
3203 Example usage:
3204 - >>> test = ["blah", "||", ["foo", "bar", "baz"]]
3205 - >>> dep_opconvert(test)
3206 + >>>> test = ["blah", "||", ["foo", "bar", "baz"]]
3207 + >>>> dep_opconvert(test)
3208 ['blah', ['||', 'foo', 'bar', 'baz']]
3209
3210 @param deplist: A list of deps to format
3211 @@ -1034,7 +1034,7 @@ def flatten(mylist):
3212 @return: A single list containing only non-list elements.
3213
3214 Example usage:
3215 - >>> flatten([1, [2, 3, [4]]])
3216 + >>>> flatten([1, [2, 3, [4]]])
3217 [1, 2, 3, 4]
3218 """
3219 if portage._internal_caller:
3220 @@ -2086,8 +2086,8 @@ def get_operator(mydep):
3221 Return the operator used in a depstring.
3222
3223 Example usage:
3224 - >>> from portage.dep import *
3225 - >>> get_operator(">=test-1.0")
3226 + >>>> from portage.dep import *
3227 + >>>> get_operator(">=test-1.0")
3228 '>='
3229
3230 @param mydep: The dep string to check
3231 @@ -2107,7 +2107,7 @@ def dep_getcpv(mydep):
3232 Return the category-package-version with any operators/slot specifications stripped off
3233
3234 Example usage:
3235 - >>> dep_getcpv('>=media-libs/test-3.0')
3236 + >>>> dep_getcpv('>=media-libs/test-3.0')
3237 'media-libs/test-3.0'
3238
3239 @param mydep: The depstring
3240 @@ -2126,7 +2126,7 @@ def dep_getslot(mydep):
3241 Retrieve the slot on a depend.
3242
3243 Example usage:
3244 - >>> dep_getslot('app-misc/test:3')
3245 + >>>> dep_getslot('app-misc/test:3')
3246 '3'
3247
3248 @param mydep: The depstring to retrieve the slot of
3249 @@ -2160,7 +2160,7 @@ def dep_getrepo(mydep):
3250 @return: The repository name
3251
3252 Example usage:
3253 - >>> dep_getrepo('app-misc/test::repository')
3254 + >>>> dep_getrepo('app-misc/test::repository')
3255 'repository'
3256 """
3257 repo = getattr(mydep, "repo", False)
3258 @@ -2213,7 +2213,7 @@ def dep_getusedeps(depend):
3259 @return: List of use flags ( or [] if no flags exist )
3260
3261 Example usage:
3262 - >>> dep_getusedeps('app-misc/test:3[foo,-bar]')
3263 + >>>> dep_getusedeps('app-misc/test:3[foo,-bar]')
3264 ('foo', '-bar')
3265 """
3266 use_list = []
3267 @@ -2276,9 +2276,9 @@ def isvalidatom(
3268 Check to see if a depend atom is valid
3269
3270 Example usage:
3271 - >>> isvalidatom('media-libs/test-3.0')
3272 + >>>> isvalidatom('media-libs/test-3.0')
3273 False
3274 - >>> isvalidatom('>=media-libs/test-3.0')
3275 + >>>> isvalidatom('>=media-libs/test-3.0')
3276 True
3277
3278 @param atom: The depend atom to check against
3279 @@ -2314,9 +2314,9 @@ def isjustname(mypkg):
3280 Checks to see if the atom is only the package name (no version parts).
3281
3282 Example usage:
3283 - >>> isjustname('=media-libs/test-3.0')
3284 + >>>> isjustname('=media-libs/test-3.0')
3285 False
3286 - >>> isjustname('media-libs/test')
3287 + >>>> isjustname('media-libs/test')
3288 True
3289
3290 @param mypkg: The package atom to check
3291 @@ -2345,9 +2345,9 @@ def isspecific(mypkg):
3292 package-version format.
3293
3294 Example usage:
3295 - >>> isspecific('media-libs/test')
3296 + >>>> isspecific('media-libs/test')
3297 False
3298 - >>> isspecific('=media-libs/test-3.0')
3299 + >>>> isspecific('=media-libs/test-3.0')
3300 True
3301
3302 @param mypkg: The package depstring to check against
3303 @@ -2373,7 +2373,7 @@ def dep_getkey(mydep):
3304 Return the category/package-name of a depstring.
3305
3306 Example usage:
3307 - >>> dep_getkey('=media-libs/test-3.0')
3308 + >>>> dep_getkey('=media-libs/test-3.0')
3309 'media-libs/test'
3310
3311 @param mydep: The depstring to retrieve the category/package-name of
3312 @@ -2538,7 +2538,7 @@ def match_from_list(mydep, candidate_list):
3313 if ver and rev:
3314 operator = mydep.operator
3315 if not operator:
3316 - writemsg(_("!!! Invalid atom: %s\n") % mydep, noiselevel=-1)
3317 + writemsg(_("!!!! Invalid atom: %s\n") % mydep, noiselevel=-1)
3318 return []
3319 else:
3320 operator = None
3321 @@ -3120,7 +3120,7 @@ def extract_affecting_use(mystr, atom, eapi=None):
3322 @return: Set of use flags affecting given atom
3323
3324 Example usage:
3325 - >>> extract_affecting_use('sasl? ( dev-libs/cyrus-sasl ) \
3326 + >>>> extract_affecting_use('sasl? ( dev-libs/cyrus-sasl ) \
3327 !minimal? ( cxx? ( dev-libs/cyrus-sasl ) )', 'dev-libs/cyrus-sasl')
3328 {'cxx', 'minimal', 'sasl'}
3329 """
3330 diff --git a/lib/portage/elog/__init__.py b/lib/portage/elog/__init__.py
3331 index 48e2a39de..138407719 100644
3332 --- a/lib/portage/elog/__init__.py
3333 +++ b/lib/portage/elog/__init__.py
3334 @@ -195,7 +195,7 @@ def elog_process(cpv, mysettings, phasefilter=None):
3335 except (ImportError, AttributeError) as e:
3336 writemsg(
3337 _(
3338 - "!!! Error while importing logging modules "
3339 + "!!!! Error while importing logging modules "
3340 'while loading "mod_%s":\n'
3341 )
3342 % str(s)
3343 diff --git a/lib/portage/elog/messages.py b/lib/portage/elog/messages.py
3344 index 6a67a45de..ea4e8c736 100644
3345 --- a/lib/portage/elog/messages.py
3346 +++ b/lib/portage/elog/messages.py
3347 @@ -50,7 +50,7 @@ def collect_ebuild_messages(path):
3348 filename = os.path.join(path, msgfunction)
3349 if msgfunction not in EBUILD_PHASES:
3350 writemsg(
3351 - _("!!! can't process invalid log file: %s\n") % filename, noiselevel=-1
3352 + _("!!!! can't process invalid log file: %s\n") % filename, noiselevel=-1
3353 )
3354 continue
3355 if not msgfunction in logentries:
3356 @@ -74,7 +74,8 @@ def collect_ebuild_messages(path):
3357 raise ValueError(msgtype)
3358 except ValueError:
3359 writemsg(
3360 - _("!!! malformed entry in " "log file: '%s': %s\n") % (filename, l),
3361 + _("!!!! malformed entry in " "log file: '%s': %s\n")
3362 + % (filename, l),
3363 noiselevel=-1,
3364 )
3365 continue
3366 diff --git a/lib/portage/elog/mod_custom.py b/lib/portage/elog/mod_custom.py
3367 index e0ae77e10..37a3e86c4 100644
3368 --- a/lib/portage/elog/mod_custom.py
3369 +++ b/lib/portage/elog/mod_custom.py
3370 @@ -12,7 +12,7 @@ def process(mysettings, key, logentries, fulltext):
3371
3372 if not mysettings.get("PORTAGE_ELOG_COMMAND"):
3373 raise portage.exception.MissingParameter(
3374 - "!!! Custom logging requested but PORTAGE_ELOG_COMMAND is not defined"
3375 + "!!!! Custom logging requested but PORTAGE_ELOG_COMMAND is not defined"
3376 )
3377 else:
3378 mylogcmd = mysettings["PORTAGE_ELOG_COMMAND"]
3379 @@ -21,5 +21,5 @@ def process(mysettings, key, logentries, fulltext):
3380 retval = portage.process.spawn_bash(mylogcmd)
3381 if retval != 0:
3382 raise portage.exception.PortageException(
3383 - "!!! PORTAGE_ELOG_COMMAND failed with exitcode %d" % retval
3384 + "!!!! PORTAGE_ELOG_COMMAND failed with exitcode %d" % retval
3385 )
3386 diff --git a/lib/portage/elog/mod_mail_summary.py b/lib/portage/elog/mod_mail_summary.py
3387 index a695290ef..79f705f8c 100644
3388 --- a/lib/portage/elog/mod_mail_summary.py
3389 +++ b/lib/portage/elog/mod_mail_summary.py
3390 @@ -28,7 +28,7 @@ def process(mysettings, key, logentries, fulltext):
3391 errors="replace",
3392 )
3393 header = _(
3394 - ">>> Messages generated for package %(pkg)s by process %(pid)d on %(time)s:\n\n"
3395 + ">>>> Messages generated for package %(pkg)s by process %(pid)d on %(time)s:\n\n"
3396 ) % {"pkg": key, "pid": portage.getpid(), "time": time_str}
3397 config_root = mysettings["PORTAGE_CONFIGROOT"]
3398
3399 diff --git a/lib/portage/elog/mod_save_summary.py b/lib/portage/elog/mod_save_summary.py
3400 index 939198fdc..75f5097d3 100644
3401 --- a/lib/portage/elog/mod_save_summary.py
3402 +++ b/lib/portage/elog/mod_save_summary.py
3403 @@ -85,7 +85,7 @@ def process(mysettings, key, logentries, fulltext):
3404 )
3405 elogfile.write(
3406 _(
3407 - ">>> Messages generated by process "
3408 + ">>>> Messages generated by process "
3409 "%(pid)d on %(time)s for package %(pkg)s:\n\n"
3410 )
3411 % {"pid": portage.getpid(), "time": time_str, "pkg": key}
3412 diff --git a/lib/portage/emaint/modules/binhost/binhost.py b/lib/portage/emaint/modules/binhost/binhost.py
3413 index 9d924f7e1..cd5c4c92a 100644
3414 --- a/lib/portage/emaint/modules/binhost/binhost.py
3415 +++ b/lib/portage/emaint/modules/binhost/binhost.py
3416 @@ -158,7 +158,8 @@ class BinhostHandler:
3417 bintree._eval_use_flags(cpv, d)
3418 except portage.exception.InvalidDependString:
3419 writemsg(
3420 - "!!! Invalid binary package: '%s'\n" % bintree.getname(cpv),
3421 + "!!!! Invalid binary package: '%s'\n"
3422 + % bintree.getname(cpv),
3423 noiselevel=-1,
3424 )
3425 else:
3426 diff --git a/lib/portage/env/loaders.py b/lib/portage/env/loaders.py
3427 index 284c311a1..6c69a1ecf 100644
3428 --- a/lib/portage/env/loaders.py
3429 +++ b/lib/portage/env/loaders.py
3430 @@ -197,10 +197,10 @@ class ItemFileLoader(FileLoader):
3431 """
3432 Class to load data from a file full of items one per line
3433
3434 - >>> item1
3435 - >>> item2
3436 - >>> item3
3437 - >>> item1
3438 + >>>> item1
3439 + >>>> item2
3440 + >>>> item3
3441 + >>>> item1
3442
3443 becomes { 'item1':None, 'item2':None, 'item3':None }
3444 Note that due to the data store being a dict, duplicates
3445 @@ -235,7 +235,7 @@ class KeyListFileLoader(FileLoader):
3446 """
3447 Class to load data from a file full of key [list] tuples
3448
3449 - >>>>key foo1 foo2 foo3
3450 + >>>>>key foo1 foo2 foo3
3451 becomes
3452 {'key':['foo1','foo2','foo3']}
3453 """
3454 @@ -288,8 +288,8 @@ class KeyValuePairFileLoader(FileLoader):
3455 """
3456 Class to load data from a file full of key=value pairs
3457
3458 - >>>>key=value
3459 - >>>>foo=bar
3460 + >>>>>key=value
3461 + >>>>>foo=bar
3462 becomes:
3463 {'key':'value',
3464 'foo':'bar'}
3465 diff --git a/lib/portage/getbinpkg.py b/lib/portage/getbinpkg.py
3466 index 6aa8f1de1..f9e4aaa62 100644
3467 --- a/lib/portage/getbinpkg.py
3468 +++ b/lib/portage/getbinpkg.py
3469 @@ -29,7 +29,7 @@ from urllib.parse import unquote as urllib_parse_unquote
3470 try:
3471 import ftplib
3472 except ImportError as e:
3473 - sys.stderr.write(colorize("BAD", "!!! CANNOT IMPORT FTPLIB: ") + str(e) + "\n")
3474 + sys.stderr.write(colorize("BAD", "!!!! CANNOT IMPORT FTPLIB: ") + str(e) + "\n")
3475 else:
3476 _all_errors.extend(ftplib.all_errors)
3477
3478 @@ -39,7 +39,9 @@ try:
3479 from http.client import ResponseNotReady as http_client_ResponseNotReady
3480 from http.client import error as http_client_error
3481 except ImportError as e:
3482 - sys.stderr.write(colorize("BAD", "!!! CANNOT IMPORT HTTP.CLIENT: ") + str(e) + "\n")
3483 + sys.stderr.write(
3484 + colorize("BAD", "!!!! CANNOT IMPORT HTTP.CLIENT: ") + str(e) + "\n"
3485 + )
3486 else:
3487 _all_errors.append(http_client_error)
3488
3489 @@ -635,7 +637,7 @@ def dir_get_metadata(
3490 except _all_errors as e:
3491 # ftplib.FTP(host) can raise errors like this:
3492 # socket.error: (111, 'Connection refused')
3493 - sys.stderr.write("!!! %s\n" % (e,))
3494 + sys.stderr.write("!!!! %s\n" % (e,))
3495 return {}
3496
3497 out = sys.stdout
3498 @@ -672,8 +674,8 @@ def dir_get_metadata(
3499 metadata[baseurl]["data"] = {}
3500
3501 if not os.access(cache_path, os.W_OK):
3502 - sys.stderr.write(_("!!! Unable to write binary metadata to disk!\n"))
3503 - sys.stderr.write(_("!!! Permission denied: '%s'\n") % cache_path)
3504 + sys.stderr.write(_("!!!! Unable to write binary metadata to disk!\n"))
3505 + sys.stderr.write(_("!!!! Permission denied: '%s'\n") % cache_path)
3506 return metadata[baseurl]["data"]
3507
3508 import portage.exception
3509 @@ -682,9 +684,9 @@ def dir_get_metadata(
3510 filelist = dir_get_list(baseurl, conn)
3511 except portage.exception.PortageException as e:
3512 sys.stderr.write(
3513 - _("!!! Error connecting to '%s'.\n") % _hide_url_passwd(baseurl)
3514 + _("!!!! Error connecting to '%s'.\n") % _hide_url_passwd(baseurl)
3515 )
3516 - sys.stderr.write("!!! %s\n" % str(e))
3517 + sys.stderr.write("!!!! %s\n" % str(e))
3518 del e
3519 return metadata[baseurl]["data"]
3520 tbz2list = match_in_array(filelist, suffix=".tbz2")
3521 @@ -728,7 +730,7 @@ def dir_get_metadata(
3522 raise
3523 except Exception as e:
3524 mytempfile.close()
3525 - sys.stderr.write(_("!!! Failed to use gzip: ") + str(e) + "\n")
3526 + sys.stderr.write(_("!!!! Failed to use gzip: ") + str(e) + "\n")
3527 sys.stderr.flush()
3528 mytempfile.close()
3529 try:
3530 @@ -744,9 +746,9 @@ def dir_get_metadata(
3531 raise
3532 except Exception as e:
3533 sys.stderr.write(
3534 - _("!!! Failed to read data from index: ") + str(mfile) + "\n"
3535 + _("!!!! Failed to read data from index: ") + str(mfile) + "\n"
3536 )
3537 - sys.stderr.write("!!! %s" % str(e))
3538 + sys.stderr.write("!!!! %s" % str(e))
3539 sys.stderr.flush()
3540 try:
3541 metadatafile = open(
3542 @@ -760,8 +762,8 @@ def dir_get_metadata(
3543 except SystemExit as e:
3544 raise
3545 except Exception as e:
3546 - sys.stderr.write(_("!!! Failed to write binary metadata to disk!\n"))
3547 - sys.stderr.write("!!! %s\n" % str(e))
3548 + sys.stderr.write(_("!!!! Failed to write binary metadata to disk!\n"))
3549 + sys.stderr.write("!!!! %s\n" % str(e))
3550 sys.stderr.flush()
3551 break
3552 # We may have metadata... now we run through the tbz2 list and check.
3553 @@ -829,7 +831,7 @@ def dir_get_metadata(
3554 metadata[baseurl]["data"][x] = make_metadata_dict(myid)
3555 elif verbose:
3556 sys.stderr.write(
3557 - colorize("BAD", _("!!! Failed to retrieve metadata on: "))
3558 + colorize("BAD", _("!!!! Failed to retrieve metadata on: "))
3559 + str(x)
3560 + "\n"
3561 )
3562 @@ -871,8 +873,8 @@ def dir_get_metadata(
3563 except SystemExit as e:
3564 raise
3565 except Exception as e:
3566 - sys.stderr.write(_("!!! Failed to write binary metadata to disk!\n"))
3567 - sys.stderr.write("!!! " + str(e) + "\n")
3568 + sys.stderr.write(_("!!!! Failed to write binary metadata to disk!\n"))
3569 + sys.stderr.write("!!!! " + str(e) + "\n")
3570 sys.stderr.flush()
3571
3572 if not keepconnection:
3573 diff --git a/lib/portage/locks.py b/lib/portage/locks.py
3574 index 67541a84d..92a3030ea 100644
3575 --- a/lib/portage/locks.py
3576 +++ b/lib/portage/locks.py
3577 @@ -343,7 +343,7 @@ def _lockfile_iteration(
3578 % lockfilename
3579 )
3580 writemsg(
3581 - "\n!!! %s: %s\n" % (context_desc, e), noiselevel=-1
3582 + "\n!!!! %s: %s\n" % (context_desc, e), noiselevel=-1
3583 )
3584
3585 time.sleep(_HARDLINK_POLL_LATENCY)
3586 diff --git a/lib/portage/mail.py b/lib/portage/mail.py
3587 index aa2617b42..b2a647a76 100644
3588 --- a/lib/portage/mail.py
3589 +++ b/lib/portage/mail.py
3590 @@ -102,7 +102,9 @@ def send_mail(mysettings, message):
3591 mymailuser, mymailpasswd = myauthdata.split(":")
3592 except ValueError:
3593 print(
3594 - _("!!! invalid SMTP AUTH configuration, trying unauthenticated ...")
3595 + _(
3596 + "!!!! invalid SMTP AUTH configuration, trying unauthenticated ..."
3597 + )
3598 )
3599 else:
3600 myconndata = mymailuri
3601 @@ -122,7 +124,7 @@ def send_mail(mysettings, message):
3602 if fd.close() != None:
3603 sys.stderr.write(
3604 _(
3605 - "!!! %s returned with a non-zero exit code. This generally indicates an error.\n"
3606 + "!!!! %s returned with a non-zero exit code. This generally indicates an error.\n"
3607 )
3608 % mymailhost
3609 )
3610 @@ -134,7 +136,7 @@ def send_mail(mysettings, message):
3611 if not myconn.has_extn("STARTTLS"):
3612 raise portage.exception.PortageException(
3613 _(
3614 - "!!! TLS support requested for logmail but not supported by server"
3615 + "!!!! TLS support requested for logmail but not supported by server"
3616 )
3617 )
3618 myconn.starttls()
3619 @@ -149,12 +151,12 @@ def send_mail(mysettings, message):
3620 myconn.quit()
3621 except smtplib.SMTPException as e:
3622 raise portage.exception.PortageException(
3623 - _("!!! An error occurred while trying to send logmail:\n") + str(e)
3624 + _("!!!! An error occurred while trying to send logmail:\n") + str(e)
3625 )
3626 except socket.error as e:
3627 raise portage.exception.PortageException(
3628 _(
3629 - "!!! A network error occurred while trying to send logmail:\n%s\nSure you configured PORTAGE_ELOG_MAILURI correctly?"
3630 + "!!!! A network error occurred while trying to send logmail:\n%s\nSure you configured PORTAGE_ELOG_MAILURI correctly?"
3631 )
3632 % str(e)
3633 )
3634 diff --git a/lib/portage/manifest.py b/lib/portage/manifest.py
3635 index 0b4fad76c..450f9e494 100644
3636 --- a/lib/portage/manifest.py
3637 +++ b/lib/portage/manifest.py
3638 @@ -447,7 +447,7 @@ class Manifest:
3639 # unless this repo is being prepared for distribution
3640 # via rsync.
3641 writemsg_level(
3642 - "!!! utime('%s', (%s, %s)): %s\n"
3643 + "!!!! utime('%s', (%s, %s)): %s\n"
3644 % (path, max_mtime, max_mtime, e),
3645 level=logging.WARNING,
3646 noiselevel=-1,
3647 diff --git a/lib/portage/metadata.py b/lib/portage/metadata.py
3648 index 0bd2bcce4..39940e27b 100644
3649 --- a/lib/portage/metadata.py
3650 +++ b/lib/portage/metadata.py
3651 @@ -19,7 +19,7 @@ from portage.util import writemsg_level
3652 def action_metadata(settings, portdb, myopts, porttrees=None):
3653 if porttrees is None:
3654 porttrees = portdb.porttrees
3655 - portage.writemsg_stdout("\n>>> Updating Portage cache\n")
3656 + portage.writemsg_stdout("\n>>>> Updating Portage cache\n")
3657 cachedir = os.path.normpath(settings.depcachedir)
3658 if cachedir in [
3659 "/",
3660 @@ -38,12 +38,12 @@ def action_metadata(settings, portdb, myopts, porttrees=None):
3661 "/var",
3662 ]:
3663 print(
3664 - "!!! PORTAGE_DEPCACHEDIR IS SET TO A PRIMARY "
3665 + "!!!! PORTAGE_DEPCACHEDIR IS SET TO A PRIMARY "
3666 + "ROOT DIRECTORY ON YOUR SYSTEM.",
3667 file=sys.stderr,
3668 )
3669 print(
3670 - "!!! This is ALMOST CERTAINLY NOT what you want: '%s'" % cachedir,
3671 + "!!!! This is ALMOST CERTAINLY NOT what you want: '%s'" % cachedir,
3672 file=sys.stderr,
3673 )
3674 sys.exit(73)
3675 diff --git a/lib/portage/news.py b/lib/portage/news.py
3676 index ce61f8490..b60d06f13 100644
3677 --- a/lib/portage/news.py
3678 +++ b/lib/portage/news.py
3679 @@ -155,7 +155,7 @@ class NewsManager:
3680 itemid, encoding=_encodings["fs"], errors="replace"
3681 )
3682 writemsg_level(
3683 - _("!!! Invalid encoding in news item name: '%s'\n") % itemid,
3684 + _("!!!! Invalid encoding in news item name: '%s'\n") % itemid,
3685 level=logging.ERROR,
3686 noiselevel=-1,
3687 )
3688 @@ -353,7 +353,9 @@ class NewsItem:
3689 for lineno, line in invalids:
3690 msg.append(_(" line %d: %s") % (lineno, line))
3691 writemsg_level(
3692 - "".join("!!! %s\n" % x for x in msg), level=logging.ERROR, noiselevel=-1
3693 + "".join("!!!! %s\n" % x for x in msg),
3694 + level=logging.ERROR,
3695 + noiselevel=-1,
3696 )
3697
3698 self._parsed = True
3699 diff --git a/lib/portage/package/ebuild/_config/LocationsManager.py b/lib/portage/package/ebuild/_config/LocationsManager.py
3700 index d65aac609..23f87383e 100644
3701 --- a/lib/portage/package/ebuild/_config/LocationsManager.py
3702 +++ b/lib/portage/package/ebuild/_config/LocationsManager.py
3703 @@ -133,7 +133,7 @@ class LocationsManager:
3704 # that can be used for backward compatibility with
3705 # old software.
3706 writemsg(
3707 - "!!! %s\n"
3708 + "!!!! %s\n"
3709 % _("Found 2 make.profile dirs: " "using '%s', ignoring '%s'")
3710 % (self.profile_path, deprecated_profile_path),
3711 noiselevel=-1,
3712 @@ -162,10 +162,10 @@ class LocationsManager:
3713 except ParseError as e:
3714 if not portage._sync_mode:
3715 writemsg(
3716 - _("!!! Unable to parse profile: '%s'\n") % self.profile_path,
3717 + _("!!!! Unable to parse profile: '%s'\n") % self.profile_path,
3718 noiselevel=-1,
3719 )
3720 - writemsg("!!! ParseError: %s\n" % str(e), noiselevel=-1)
3721 + writemsg("!!!! ParseError: %s\n" % str(e), noiselevel=-1)
3722 self.profiles = []
3723 self.profiles_complex = []
3724
3725 @@ -198,7 +198,7 @@ class LocationsManager:
3726 def _check_var_directory(self, varname, var):
3727 if not isdir_raise_eaccess(var):
3728 writemsg(
3729 - _("!!! Error: %s='%s' is not a directory. " "Please correct this.\n")
3730 + _("!!!! Error: %s='%s' is not a directory. " "Please correct this.\n")
3731 % (varname, var),
3732 noiselevel=-1,
3733 )
3734 @@ -392,7 +392,7 @@ class LocationsManager:
3735 if self.sysroot != "/" and self.sysroot != self.target_root:
3736 writemsg(
3737 _(
3738 - "!!! Error: SYSROOT (currently %s) must "
3739 + "!!!! Error: SYSROOT (currently %s) must "
3740 "equal / or ROOT (currently %s).\n"
3741 )
3742 % (self.sysroot, self.target_root),
3743 diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
3744 index 7bf5dd141..bef21f22f 100644
3745 --- a/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
3746 +++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
3747 @@ -25,20 +25,20 @@ class ManifestProcess(ForkProcess):
3748 mf.create(assumeDistHashesAlways=True)
3749 except FileNotFound as e:
3750 portage.writemsg(
3751 - _("!!! File %s doesn't exist, can't update " "Manifest\n") % e,
3752 + _("!!!! File %s doesn't exist, can't update " "Manifest\n") % e,
3753 noiselevel=-1,
3754 )
3755 return 1
3756
3757 except PortagePackageException as e:
3758 - portage.writemsg(("!!! %s\n") % (e,), noiselevel=-1)
3759 + portage.writemsg(("!!!! %s\n") % (e,), noiselevel=-1)
3760 return 1
3761
3762 try:
3763 modified = mf.write(sign=False)
3764 except PermissionDenied as e:
3765 portage.writemsg(
3766 - "!!! %s: %s\n"
3767 + "!!!! %s: %s\n"
3768 % (
3769 _("Permission Denied"),
3770 e,
3771 diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
3772 index 4599e2d50..be4bd0523 100644
3773 --- a/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
3774 +++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
3775 @@ -63,7 +63,7 @@ class ManifestScheduler(AsyncScheduler):
3776 disabled_repos.add(repo_config.name)
3777 portage.writemsg(
3778 _(
3779 - ">>> Skipping creating Manifest for %s%s%s; "
3780 + ">>>> Skipping creating Manifest for %s%s%s; "
3781 "repository is configured to not use them\n"
3782 )
3783 % (cp, _repo_separator, repo_config.name),
3784 diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
3785 index df279dab6..f439e155a 100644
3786 --- a/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
3787 +++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
3788 @@ -54,7 +54,7 @@ class ManifestTask(CompositeTask):
3789 self.fetchlist_dict.result()
3790 except InvalidDependString as e:
3791 writemsg(
3792 - _("!!! %s%s%s: SRC_URI: %s\n")
3793 + _("!!!! %s%s%s: SRC_URI: %s\n")
3794 % (self.cp, _repo_separator, self.repo_config.name, e),
3795 noiselevel=-1,
3796 )
3797 @@ -212,7 +212,9 @@ class ManifestTask(CompositeTask):
3798 try:
3799 os.rename(*rename_args)
3800 except OSError as e:
3801 - writemsg("!!! rename('%s', '%s'): %s\n" % rename_args + (e,), noiselevel=-1)
3802 + writemsg(
3803 + "!!!! rename('%s', '%s'): %s\n" % rename_args + (e,), noiselevel=-1
3804 + )
3805 try:
3806 os.unlink(self._manifest_path + ".asc")
3807 except OSError:
3808 diff --git a/lib/portage/package/ebuild/config.py b/lib/portage/package/ebuild/config.py
3809 index b4d6862a3..d3e32108f 100644
3810 --- a/lib/portage/package/ebuild/config.py
3811 +++ b/lib/portage/package/ebuild/config.py
3812 @@ -457,7 +457,7 @@ class config:
3813
3814 if make_conf_count == 2:
3815 writemsg(
3816 - "!!! %s\n"
3817 + "!!!! %s\n"
3818 % _("Found 2 make.conf files, using both '%s' and '%s'")
3819 % tuple(make_conf_paths),
3820 noiselevel=-1,
3821 @@ -525,7 +525,7 @@ class config:
3822 # that can be used for backward compatibility with
3823 # old software.
3824 writemsg(
3825 - "!!! %s\n"
3826 + "!!!! %s\n"
3827 % _(
3828 "Found obsolete make.globals file: "
3829 "'%s', (using '%s' instead)"
3830 @@ -687,7 +687,7 @@ class config:
3831 new_ov.append(portage._shell_quote(ov))
3832 else:
3833 writemsg(
3834 - _("!!! Invalid PORTDIR_OVERLAY" " (not a dir): '%s'\n")
3835 + _("!!!! Invalid PORTDIR_OVERLAY" " (not a dir): '%s'\n")
3836 % ov,
3837 noiselevel=-1,
3838 )
3839 @@ -1036,7 +1036,7 @@ class config:
3840 # TODO: bail out?
3841 writemsg(
3842 (
3843 - _("!!! package.provided not allowed in EAPI %s: ")
3844 + _("!!!! package.provided not allowed in EAPI %s: ")
3845 % x.eapi
3846 )
3847 + x.location
3848 @@ -1151,7 +1151,7 @@ class config:
3849 except ValueError:
3850 writemsg(
3851 _(
3852 - "!!! %s='%s' is not a valid integer. "
3853 + "!!!! %s='%s' is not a valid integer. "
3854 "Falling back to %s.\n"
3855 )
3856 % (var, self[var], default_val),
3857 @@ -1294,10 +1294,10 @@ class config:
3858 ensure_dirs(mydir, gid=gid, mode=mode, mask=modemask)
3859 except PortageException as e:
3860 writemsg(
3861 - _("!!! Directory initialization failed: '%s'\n") % mydir,
3862 + _("!!!! Directory initialization failed: '%s'\n") % mydir,
3863 noiselevel=-1,
3864 )
3865 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
3866 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
3867
3868 @property
3869 def _keywords_manager(self):
3870 @@ -1390,7 +1390,7 @@ class config:
3871 and group not in ("*", "~*", "**")
3872 ):
3873 writemsg(
3874 - _("!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
3875 + _("!!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
3876 noiselevel=-1,
3877 )
3878
3879 @@ -1428,26 +1428,26 @@ class config:
3880
3881 writemsg(
3882 _(
3883 - "\n\n!!! %s is not a symlink and will probably prevent most merges.\n"
3884 + "\n\n!!!! %s is not a symlink and will probably prevent most merges.\n"
3885 )
3886 % abs_profile_path,
3887 noiselevel=-1,
3888 )
3889 writemsg(
3890 - _("!!! It should point into a profile within %s/profiles/\n")
3891 + _("!!!! It should point into a profile within %s/profiles/\n")
3892 % self["PORTDIR"]
3893 )
3894 writemsg(
3895 _(
3896 - "!!! (You can safely ignore this message when syncing. It's harmless.)\n\n\n"
3897 + "!!!! (You can safely ignore this message when syncing. It's harmless.)\n\n\n"
3898 )
3899 )
3900
3901 abs_user_virtuals = os.path.join(self["PORTAGE_CONFIGROOT"], USER_VIRTUALS_FILE)
3902 if os.path.exists(abs_user_virtuals):
3903 - writemsg("\n!!! /etc/portage/virtuals is deprecated in favor of\n")
3904 - writemsg("!!! /etc/portage/profile/virtuals. Please move it to\n")
3905 - writemsg("!!! this new location.\n\n")
3906 + writemsg("\n!!!! /etc/portage/virtuals is deprecated in favor of\n")
3907 + writemsg("!!!! /etc/portage/profile/virtuals. Please move it to\n")
3908 + writemsg("!!!! this new location.\n\n")
3909
3910 if not sandbox_capable and (
3911 "sandbox" in self.features or "usersandbox" in self.features
3912 @@ -1462,7 +1462,8 @@ class config:
3913 # to the user.
3914 writemsg(
3915 colorize(
3916 - "BAD", _("!!! Problem with sandbox" " binary. Disabling...\n\n")
3917 + "BAD",
3918 + _("!!!! Problem with sandbox" " binary. Disabling...\n\n"),
3919 ),
3920 noiselevel=-1,
3921 )
3922 @@ -1470,7 +1471,7 @@ class config:
3923 if "fakeroot" in self.features and not fakeroot_capable:
3924 writemsg(
3925 _(
3926 - "!!! FEATURES=fakeroot is enabled, but the "
3927 + "!!!! FEATURES=fakeroot is enabled, but the "
3928 "fakeroot binary is not installed.\n"
3929 ),
3930 noiselevel=-1,
3931 @@ -1479,7 +1480,7 @@ class config:
3932 if "webrsync-gpg" in self.features:
3933 writemsg(
3934 _(
3935 - "!!! FEATURES=webrsync-gpg is deprecated, see the make.conf(5) man page.\n"
3936 + "!!!! FEATURES=webrsync-gpg is deprecated, see the make.conf(5) man page.\n"
3937 ),
3938 noiselevel=-1,
3939 )
3940 @@ -1490,7 +1491,7 @@ class config:
3941 if "userpriv" in self.features:
3942 writemsg(
3943 _(
3944 - "!!! FEATURES=userpriv is enabled, but "
3945 + "!!!! FEATURES=userpriv is enabled, but "
3946 "os.setgroups is not available.\n"
3947 ),
3948 noiselevel=-1,
3949 @@ -1500,7 +1501,7 @@ class config:
3950 if "userfetch" in self.features:
3951 writemsg(
3952 _(
3953 - "!!! FEATURES=userfetch is enabled, but "
3954 + "!!!! FEATURES=userfetch is enabled, but "
3955 "os.setgroups is not available.\n"
3956 ),
3957 noiselevel=-1,
3958 @@ -1509,7 +1510,7 @@ class config:
3959
3960 if warning_shown and platform.python_implementation() == "PyPy":
3961 writemsg(
3962 - _("!!! See https://bugs.pypy.org/issue833 for details.\n"),
3963 + _("!!!! See https://bugs.pypy.org/issue833 for details.\n"),
3964 noiselevel=-1,
3965 )
3966
3967 @@ -1519,7 +1520,7 @@ class config:
3968 compression = _compressors[binpkg_compression]
3969 except KeyError as e:
3970 writemsg(
3971 - "!!! BINPKG_COMPRESS contains invalid or "
3972 + "!!!! BINPKG_COMPRESS contains invalid or "
3973 "unsupported compression method: %s" % e.args[0],
3974 noiselevel=-1,
3975 )
3976 @@ -1530,7 +1531,7 @@ class config:
3977 )[0]
3978 except IndexError as e:
3979 writemsg(
3980 - "!!! BINPKG_COMPRESS contains invalid or "
3981 + "!!!! BINPKG_COMPRESS contains invalid or "
3982 "unsupported compression method: %s" % e.args[0],
3983 noiselevel=-1,
3984 )
3985 @@ -1538,7 +1539,7 @@ class config:
3986 if portage.process.find_binary(compression_binary) is None:
3987 missing_package = compression["package"]
3988 writemsg(
3989 - "!!! BINPKG_COMPRESS unsupported %s. "
3990 + "!!!! BINPKG_COMPRESS unsupported %s. "
3991 "Missing package: %s"
3992 % (binpkg_compression, missing_package),
3993 noiselevel=-1,
3994 @@ -2231,7 +2232,7 @@ class config:
3995 )
3996 if penvconfig is None:
3997 writemsg(
3998 - "!!! %s references non-existent file: %s\n"
3999 + "!!!! %s references non-existent file: %s\n"
4000 % (os.path.join(abs_user_config, "package.env"), penvfile),
4001 noiselevel=-1,
4002 )
4003 @@ -2239,7 +2240,7 @@ class config:
4004 for k, v in penvconfig.items():
4005 if k in protected_keys or k in non_user_variables:
4006 writemsg(
4007 - "!!! Illegal variable "
4008 + "!!!! Illegal variable "
4009 + "'%s' assigned in '%s'\n" % (k, penvfile),
4010 noiselevel=-1,
4011 )
4012 @@ -2611,7 +2612,7 @@ class config:
4013 self._accept_chost_re = re.compile(r"^%s$" % accept_chost[0])
4014 except re.error as e:
4015 writemsg(
4016 - _("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
4017 + _("!!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
4018 % (accept_chost[0], e),
4019 noiselevel=-1,
4020 )
4021 @@ -2623,7 +2624,7 @@ class config:
4022 )
4023 except re.error as e:
4024 writemsg(
4025 - _("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
4026 + _("!!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
4027 % (" ".join(accept_chost), e),
4028 noiselevel=-1,
4029 )
4030 @@ -3236,7 +3237,7 @@ class config:
4031 continue
4032 if not isinstance(myvalue, str):
4033 writemsg(
4034 - _("!!! Non-string value in config: %s=%s\n") % (x, myvalue),
4035 + _("!!!! Non-string value in config: %s=%s\n") % (x, myvalue),
4036 noiselevel=-1,
4037 )
4038 continue
4039 @@ -3337,7 +3338,7 @@ class config:
4040 mydict["LC_CTYPE"] = l
4041 if check_locale(silent=True, env=mydict):
4042 # TODO: output the following only once
4043 - # writemsg(_("!!! LC_CTYPE unsupported, using %s instead\n")
4044 + # writemsg(_("!!!! LC_CTYPE unsupported, using %s instead\n")
4045 # % mydict["LC_CTYPE"])
4046 break
4047 else:
4048 @@ -3405,7 +3406,7 @@ class config:
4049 else:
4050 writemsg(
4051 _(
4052 - "!!! SELinux module not found. Please verify that it was installed.\n"
4053 + "!!!! SELinux module not found. Please verify that it was installed.\n"
4054 ),
4055 noiselevel=-1,
4056 )
4057 diff --git a/lib/portage/package/ebuild/deprecated_profile_check.py b/lib/portage/package/ebuild/deprecated_profile_check.py
4058 index 19bea1903..4d96e039a 100644
4059 --- a/lib/portage/package/ebuild/deprecated_profile_check.py
4060 +++ b/lib/portage/package/ebuild/deprecated_profile_check.py
4061 @@ -51,18 +51,22 @@ def deprecated_profile_check(settings=None):
4062 writemsg(
4063 colorize(
4064 "BAD",
4065 - _("\n!!! Your current profile is " "deprecated and not supported anymore."),
4066 + _(
4067 + "\n!!!! Your current profile is "
4068 + "deprecated and not supported anymore."
4069 + ),
4070 )
4071 + "\n",
4072 noiselevel=-1,
4073 )
4074 writemsg(
4075 - colorize("BAD", _("!!! Use eselect profile to update your " "profile.")) + "\n",
4076 + colorize("BAD", _("!!!! Use eselect profile to update your " "profile."))
4077 + + "\n",
4078 noiselevel=-1,
4079 )
4080 if not dcontent:
4081 writemsg(
4082 - colorize("BAD", _("!!! Please refer to the " "Gentoo Upgrading Guide."))
4083 + colorize("BAD", _("!!!! Please refer to the " "Gentoo Upgrading Guide."))
4084 + "\n",
4085 noiselevel=-1,
4086 )
4087 @@ -70,7 +74,7 @@ def deprecated_profile_check(settings=None):
4088 newprofile = dcontent[0].rstrip("\n")
4089 writemsg(
4090 colorize(
4091 - "BAD", _("!!! Please upgrade to the " "following profile if possible:")
4092 + "BAD", _("!!!! Please upgrade to the " "following profile if possible:")
4093 )
4094 + "\n\n",
4095 noiselevel=-1,
4096 diff --git a/lib/portage/package/ebuild/digestcheck.py b/lib/portage/package/ebuild/digestcheck.py
4097 index 3fe64550c..ebf7297fe 100644
4098 --- a/lib/portage/package/ebuild/digestcheck.py
4099 +++ b/lib/portage/package/ebuild/digestcheck.py
4100 @@ -66,24 +66,24 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
4101 if mf.allow_missing:
4102 continue
4103 eout.eend(1)
4104 - writemsg(_("\n!!! Missing digest for '%s'\n") % (f,), noiselevel=-1)
4105 + writemsg(_("\n!!!! Missing digest for '%s'\n") % (f,), noiselevel=-1)
4106 return 0
4107 mf.checkFileHashes(ftype, f, hash_filter=hash_filter)
4108 eout.eend(0)
4109 except FileNotFound as e:
4110 eout.eend(1)
4111 writemsg(
4112 - _("\n!!! A file listed in the Manifest could not be found: %s\n") % str(e),
4113 + _("\n!!!! A file listed in the Manifest could not be found: %s\n") % str(e),
4114 noiselevel=-1,
4115 )
4116 return 0
4117 except DigestException as e:
4118 eout.eend(1)
4119 - writemsg(_("\n!!! Digest verification failed:\n"), noiselevel=-1)
4120 - writemsg("!!! %s\n" % e.value[0], noiselevel=-1)
4121 - writemsg(_("!!! Reason: %s\n") % e.value[1], noiselevel=-1)
4122 - writemsg(_("!!! Got: %s\n") % e.value[2], noiselevel=-1)
4123 - writemsg(_("!!! Expected: %s\n") % e.value[3], noiselevel=-1)
4124 + writemsg(_("\n!!!! Digest verification failed:\n"), noiselevel=-1)
4125 + writemsg("!!!! %s\n" % e.value[0], noiselevel=-1)
4126 + writemsg(_("!!!! Reason: %s\n") % e.value[1], noiselevel=-1)
4127 + writemsg(_("!!!! Got: %s\n") % e.value[2], noiselevel=-1)
4128 + writemsg(_("!!!! Expected: %s\n") % e.value[3], noiselevel=-1)
4129 return 0
4130 if mf.thin or mf.allow_missing:
4131 # In this case we ignore any missing digests that
4132 @@ -96,7 +96,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
4133 pf = f[:-7]
4134 if pf is not None and not mf.hasFile("EBUILD", f):
4135 writemsg(
4136 - _("!!! A file is not listed in the Manifest: '%s'\n")
4137 + _("!!!! A file is not listed in the Manifest: '%s'\n")
4138 % os.path.join(pkgdir, f),
4139 noiselevel=-1,
4140 )
4141 @@ -114,7 +114,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
4142 parent, encoding=_encodings["fs"], errors="replace"
4143 )
4144 writemsg(
4145 - _("!!! Path contains invalid " "character(s) for encoding '%s': '%s'")
4146 + _("!!!! Path contains invalid " "character(s) for encoding '%s': '%s'")
4147 % (_encodings["fs"], parent),
4148 noiselevel=-1,
4149 )
4150 @@ -129,7 +129,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
4151 d = _unicode_decode(d, encoding=_encodings["fs"], errors="replace")
4152 writemsg(
4153 _(
4154 - "!!! Path contains invalid "
4155 + "!!!! Path contains invalid "
4156 "character(s) for encoding '%s': '%s'"
4157 )
4158 % (_encodings["fs"], os.path.join(parent, d)),
4159 @@ -151,7 +151,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
4160 f = os.path.join(parent, f)[len(filesdir) + 1 :]
4161 writemsg(
4162 _(
4163 - "!!! File name contains invalid "
4164 + "!!!! File name contains invalid "
4165 "character(s) for encoding '%s': '%s'"
4166 )
4167 % (_encodings["fs"], f),
4168 @@ -166,7 +166,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
4169 file_type = mf.findFile(f)
4170 if file_type != "AUX" and not f.startswith("digest-"):
4171 writemsg(
4172 - _("!!! A file is not listed in the Manifest: '%s'\n")
4173 + _("!!!! A file is not listed in the Manifest: '%s'\n")
4174 % os.path.join(filesdir, f),
4175 noiselevel=-1,
4176 )
4177 diff --git a/lib/portage/package/ebuild/digestgen.py b/lib/portage/package/ebuild/digestgen.py
4178 index 3a3c92a3a..006aa1cc6 100644
4179 --- a/lib/portage/package/ebuild/digestgen.py
4180 +++ b/lib/portage/package/ebuild/digestgen.py
4181 @@ -56,7 +56,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
4182 for myfile in fetchlist_dict[cpv]:
4183 distfiles_map.setdefault(myfile, []).append(cpv)
4184 except InvalidDependString as e:
4185 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
4186 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
4187 del e
4188 return 0
4189 mytree = os.path.dirname(os.path.dirname(mysettings["O"]))
4190 @@ -77,7 +77,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
4191 if not mf.allow_create:
4192 writemsg_stdout(
4193 _(
4194 - ">>> Skipping creating Manifest for %s; "
4195 + ">>>> Skipping creating Manifest for %s; "
4196 "repository is configured to not use them\n"
4197 )
4198 % mysettings["O"]
4199 @@ -162,7 +162,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
4200 myebuild = os.path.join(mysettings["O"], catsplit(cpv)[1] + ".ebuild")
4201 spawn_nofetch(myportdb, myebuild)
4202 writemsg(
4203 - _("!!! Fetch failed for %s, can't update Manifest\n") % myfile,
4204 + _("!!!! Fetch failed for %s, can't update Manifest\n") % myfile,
4205 noiselevel=-1,
4206 )
4207 if myfile in dist_hashes and st is not None and st.st_size > 0:
4208 @@ -176,17 +176,17 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
4209 writemsg(
4210 (
4211 _(
4212 - "!!! If you would like to forcefully replace the existing Manifest entry\n"
4213 - "!!! for %s, use the following command:\n"
4214 + "!!!! If you would like to forcefully replace the existing Manifest entry\n"
4215 + "!!!! for %s, use the following command:\n"
4216 )
4217 % myfile
4218 )
4219 - + "!!! %s\n" % cmd,
4220 + + "!!!! %s\n" % cmd,
4221 noiselevel=-1,
4222 )
4223 return 0
4224
4225 - writemsg_stdout(_(">>> Creating Manifest for %s\n") % mysettings["O"])
4226 + writemsg_stdout(_(">>>> Creating Manifest for %s\n") % mysettings["O"])
4227 try:
4228 mf.create(
4229 assumeDistHashesSometimes=True,
4230 @@ -194,17 +194,17 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
4231 )
4232 except FileNotFound as e:
4233 writemsg(
4234 - _("!!! File %s doesn't exist, can't update Manifest\n") % e,
4235 + _("!!!! File %s doesn't exist, can't update Manifest\n") % e,
4236 noiselevel=-1,
4237 )
4238 return 0
4239 except PortagePackageException as e:
4240 - writemsg(("!!! %s\n") % (e,), noiselevel=-1)
4241 + writemsg(("!!!! %s\n") % (e,), noiselevel=-1)
4242 return 0
4243 try:
4244 mf.write(sign=False)
4245 except PermissionDenied as e:
4246 - writemsg(_("!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
4247 + writemsg(_("!!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
4248 return 0
4249 if "assume-digests" not in mysettings.features:
4250 distlist = list(mf.fhashdict.get("DIST", {}))
4251 diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py
4252 index 9650a8444..d33f3e622 100644
4253 --- a/lib/portage/package/ebuild/doebuild.py
4254 +++ b/lib/portage/package/ebuild/doebuild.py
4255 @@ -852,12 +852,12 @@ def doebuild(
4256 if mydo not in validcommands:
4257 validcommands.sort()
4258 writemsg(
4259 - "!!! doebuild: '%s' is not one of the following valid commands:" % mydo,
4260 + "!!!! doebuild: '%s' is not one of the following valid commands:" % mydo,
4261 noiselevel=-1,
4262 )
4263 for vcount in range(len(validcommands)):
4264 if vcount % 6 == 0:
4265 - writemsg("\n!!! ", noiselevel=-1)
4266 + writemsg("\n!!!! ", noiselevel=-1)
4267 writemsg(validcommands[vcount].ljust(11), noiselevel=-1)
4268 writemsg("\n", noiselevel=-1)
4269 return 1
4270 @@ -880,7 +880,7 @@ def doebuild(
4271
4272 if mydo not in clean_phases and not os.path.exists(myebuild):
4273 writemsg(
4274 - "!!! doebuild: %s not found for %s\n" % (myebuild, mydo), noiselevel=-1
4275 + "!!!! doebuild: %s not found for %s\n" % (myebuild, mydo), noiselevel=-1
4276 )
4277 return 1
4278
4279 @@ -1035,7 +1035,7 @@ def doebuild(
4280
4281 if returnpid:
4282 writemsg(
4283 - "!!! doebuild: %s\n"
4284 + "!!!! doebuild: %s\n"
4285 % _("returnpid is not supported for phase '%s'\n" % mydo),
4286 noiselevel=-1,
4287 )
4288 @@ -1071,7 +1071,7 @@ def doebuild(
4289 if mydo == "unmerge":
4290 if returnpid:
4291 writemsg(
4292 - "!!! doebuild: %s\n"
4293 + "!!!! doebuild: %s\n"
4294 % _("returnpid is not supported for phase '%s'\n" % mydo),
4295 noiselevel=-1,
4296 )
4297 @@ -1116,12 +1116,12 @@ def doebuild(
4298 os.path.join(mysettings["PORTAGE_BUILDDIR"], ".unpacked")
4299 ):
4300 writemsg_stdout(
4301 - _(">>> Not marked as unpacked; recreating WORKDIR...\n")
4302 + _(">>>> Not marked as unpacked; recreating WORKDIR...\n")
4303 )
4304 newstuff = True
4305 else:
4306 for x in alist:
4307 - writemsg_stdout(">>> Checking %s's mtime...\n" % x)
4308 + writemsg_stdout(">>>> Checking %s's mtime...\n" % x)
4309 try:
4310 x_st = os.stat(os.path.join(mysettings["DISTDIR"], x))
4311 except OSError:
4312 @@ -1131,7 +1131,7 @@ def doebuild(
4313 if x_st is not None and x_st.st_mtime > workdir_st.st_mtime:
4314 writemsg_stdout(
4315 _(
4316 - ">>> Timestamp of "
4317 + ">>>> Timestamp of "
4318 "%s has changed; recreating WORKDIR...\n"
4319 )
4320 % x
4321 @@ -1159,7 +1159,7 @@ def doebuild(
4322 )
4323 builddir_lock = None
4324 else:
4325 - writemsg_stdout(_(">>> WORKDIR is up-to-date, keeping...\n"))
4326 + writemsg_stdout(_(">>>> WORKDIR is up-to-date, keeping...\n"))
4327 unpacked = True
4328
4329 # Build directory creation isn't required for any of these.
4330 @@ -1293,8 +1293,8 @@ def doebuild(
4331 alist = _parse_uri_map(mysettings.mycpv, metadata, use=use)
4332 aalist = _parse_uri_map(mysettings.mycpv, metadata)
4333 except InvalidDependString as e:
4334 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
4335 - writemsg(_("!!! Invalid SRC_URI for '%s'.\n") % mycpv, noiselevel=-1)
4336 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
4337 + writemsg(_("!!!! Invalid SRC_URI for '%s'.\n") % mycpv, noiselevel=-1)
4338 del e
4339 return 1
4340
4341 @@ -1383,7 +1383,7 @@ def doebuild(
4342 _doebuild_manifest_cache = None
4343 digestgen(mysettings=mysettings, myportdb=mydbapi)
4344 except PermissionDenied as e:
4345 - writemsg(_("!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
4346 + writemsg(_("!!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
4347 if mydo in ("digest", "manifest"):
4348 return 1
4349
4350 @@ -1491,7 +1491,7 @@ def doebuild(
4351
4352 elif returnpid:
4353 writemsg(
4354 - "!!! doebuild: %s\n"
4355 + "!!!! doebuild: %s\n"
4356 % _("returnpid is not supported for phase '%s'\n" % mydo),
4357 noiselevel=-1,
4358 )
4359 @@ -1506,7 +1506,7 @@ def doebuild(
4360 os.path.join(mysettings["PORTAGE_BUILDDIR"], ".installed")
4361 ):
4362 writemsg(
4363 - _("!!! mydo=qmerge, but the install phase has not been run\n"),
4364 + _("!!!! mydo=qmerge, but the install phase has not been run\n"),
4365 noiselevel=-1,
4366 )
4367 return 1
4368 @@ -1563,7 +1563,7 @@ def doebuild(
4369 )
4370
4371 else:
4372 - writemsg_stdout(_("!!! Unknown mydo: %s\n") % mydo, noiselevel=-1)
4373 + writemsg_stdout(_("!!!! Unknown mydo: %s\n") % mydo, noiselevel=-1)
4374 return 1
4375
4376 return retval
4377 @@ -2176,13 +2176,13 @@ def spawnebuild(
4378 if os.path.exists(check_file):
4379 writemsg_stdout(
4380 _(
4381 - ">>> It appears that "
4382 + ">>>> It appears that "
4383 "'%(action)s' has already executed for '%(pkg)s'; skipping.\n"
4384 )
4385 % {"action": mydo, "pkg": mysettings["PF"]}
4386 )
4387 writemsg_stdout(
4388 - _(">>> Remove '%(file)s' to force %(action)s.\n")
4389 + _(">>>> Remove '%(file)s' to force %(action)s.\n")
4390 % {"file": check_file, "action": mydo}
4391 )
4392 return os.EX_OK
4393 @@ -2277,7 +2277,7 @@ def _check_build_log(mysettings, out=None):
4394 )
4395 command_not_found_exclude_re = re.compile(r"/configure: line ")
4396 helper_missing_file = []
4397 - helper_missing_file_re = re.compile(r"^!!! (do|new).*: .* does not exist$")
4398 + helper_missing_file_re = re.compile(r"^!!!! (do|new).*: .* does not exist$")
4399
4400 configure_opts_warn = []
4401 configure_opts_warn_re = re.compile(
4402 diff --git a/lib/portage/package/ebuild/fetch.py b/lib/portage/package/ebuild/fetch.py
4403 index 8c64362c2..ef47c4115 100644
4404 --- a/lib/portage/package/ebuild/fetch.py
4405 +++ b/lib/portage/package/ebuild/fetch.py
4406 @@ -330,11 +330,11 @@ def _check_digests(filename, digests, show_errors=1):
4407 if not verified_ok:
4408 if show_errors:
4409 writemsg(
4410 - _("!!! Previously fetched" " file: '%s'\n") % filename, noiselevel=-1
4411 + _("!!!! Previously fetched" " file: '%s'\n") % filename, noiselevel=-1
4412 )
4413 - writemsg(_("!!! Reason: %s\n") % reason[0], noiselevel=-1)
4414 + writemsg(_("!!!! Reason: %s\n") % reason[0], noiselevel=-1)
4415 writemsg(
4416 - _("!!! Got: %s\n" "!!! Expected: %s\n") % (reason[1], reason[2]),
4417 + _("!!!! Got: %s\n" "!!! Expected: %s\n") % (reason[1], reason[2]),
4418 noiselevel=-1,
4419 )
4420 return False
4421 @@ -815,7 +815,7 @@ def fetch(
4422 # XXX: This is not a good thing, and is temporary at best.
4423 print(
4424 _(
4425 - '>>> "mirror" mode desired and "mirror" restriction found; skipping fetch.'
4426 + '>>>> "mirror" mode desired and "mirror" restriction found; skipping fetch.'
4427 )
4428 )
4429 return 1
4430 @@ -834,14 +834,14 @@ def fetch(
4431 except (ValueError, OverflowError):
4432 writemsg(
4433 _(
4434 - "!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
4435 + "!!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
4436 " contains non-integer value: '%s'\n"
4437 )
4438 % mysettings["PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"],
4439 noiselevel=-1,
4440 )
4441 writemsg(
4442 - _("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
4443 + _("!!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
4444 % checksum_failure_max_tries,
4445 noiselevel=-1,
4446 )
4447 @@ -849,14 +849,14 @@ def fetch(
4448 if v < 1:
4449 writemsg(
4450 _(
4451 - "!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
4452 + "!!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
4453 " contains value less than 1: '%s'\n"
4454 )
4455 % v,
4456 noiselevel=-1,
4457 )
4458 writemsg(
4459 - _("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
4460 + _("!!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
4461 % checksum_failure_max_tries,
4462 noiselevel=-1,
4463 )
4464 @@ -875,14 +875,14 @@ def fetch(
4465 if match is None or (match.group(2).upper() not in _size_suffix_map):
4466 writemsg(
4467 _(
4468 - "!!! Variable PORTAGE_FETCH_RESUME_MIN_SIZE"
4469 + "!!!! Variable PORTAGE_FETCH_RESUME_MIN_SIZE"
4470 " contains an unrecognized format: '%s'\n"
4471 )
4472 % mysettings["PORTAGE_FETCH_RESUME_MIN_SIZE"],
4473 noiselevel=-1,
4474 )
4475 writemsg(
4476 - _("!!! Using PORTAGE_FETCH_RESUME_MIN_SIZE " "default value: %s\n")
4477 + _("!!!! Using PORTAGE_FETCH_RESUME_MIN_SIZE " "default value: %s\n")
4478 % fetch_resume_size_default,
4479 noiselevel=-1,
4480 )
4481 @@ -929,7 +929,7 @@ def fetch(
4482 colorize(
4483 "BAD",
4484 _(
4485 - "!!! For fetching to a read-only filesystem, "
4486 + "!!!! For fetching to a read-only filesystem, "
4487 "locking should be turned off.\n"
4488 ),
4489 ),
4490 @@ -937,7 +937,7 @@ def fetch(
4491 )
4492 writemsg(
4493 _(
4494 - "!!! This can be done by adding -distlocks to "
4495 + "!!!! This can be done by adding -distlocks to "
4496 "FEATURES in /etc/portage/make.conf\n"
4497 ),
4498 noiselevel=-1,
4499 @@ -1089,7 +1089,7 @@ def fetch(
4500 mirrorname not in custommirrors
4501 and mirrorname not in thirdpartymirrors
4502 ):
4503 - writemsg(_("!!! No known mirror by the name: %s\n") % (mirrorname))
4504 + writemsg(_("!!!! No known mirror by the name: %s\n") % (mirrorname))
4505 else:
4506 writemsg(_("Invalid mirror definition in SRC_URI:\n"), noiselevel=-1)
4507 writemsg(" %s\n" % (myuri), noiselevel=-1)
4508 @@ -1131,17 +1131,17 @@ def fetch(
4509 _ensure_distdir(mysettings, mysettings["DISTDIR"])
4510 except PortageException as e:
4511 if not os.path.isdir(mysettings["DISTDIR"]):
4512 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
4513 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
4514 writemsg(
4515 - _("!!! Directory Not Found: DISTDIR='%s'\n")
4516 + _("!!!! Directory Not Found: DISTDIR='%s'\n")
4517 % mysettings["DISTDIR"],
4518 noiselevel=-1,
4519 )
4520 - writemsg(_("!!! Fetching will fail!\n"), noiselevel=-1)
4521 + writemsg(_("!!!! Fetching will fail!\n"), noiselevel=-1)
4522
4523 if can_fetch and not fetch_to_ro and not os.access(mysettings["DISTDIR"], os.W_OK):
4524 writemsg(
4525 - _("!!! No write access to '%s'\n") % mysettings["DISTDIR"], noiselevel=-1
4526 + _("!!!! No write access to '%s'\n") % mysettings["DISTDIR"], noiselevel=-1
4527 )
4528 can_fetch = False
4529
4530 @@ -1175,11 +1175,11 @@ def fetch(
4531 expected,
4532 )
4533 writemsg(
4534 - _("!!! Fetched file: %s VERIFY FAILED!\n") % myfile, noiselevel=-1
4535 + _("!!!! Fetched file: %s VERIFY FAILED!\n") % myfile, noiselevel=-1
4536 )
4537 - writemsg(_("!!! Reason: %s\n") % reason[0], noiselevel=-1)
4538 + writemsg(_("!!!! Reason: %s\n") % reason[0], noiselevel=-1)
4539 writemsg(
4540 - _("!!! Got: %s\n!!! Expected: %s\n") % (reason[1], reason[2]),
4541 + _("!!!! Got: %s\n!!! Expected: %s\n") % (reason[1], reason[2]),
4542 noiselevel=-1,
4543 )
4544
4545 @@ -1217,7 +1217,7 @@ def fetch(
4546 vfs_stat = os.statvfs(mysettings["DISTDIR"])
4547 except OSError as e:
4548 writemsg_level(
4549 - "!!! statvfs('%s'): %s\n" % (mysettings["DISTDIR"], e),
4550 + "!!!! statvfs('%s'): %s\n" % (mysettings["DISTDIR"], e),
4551 noiselevel=-1,
4552 level=logging.ERROR,
4553 )
4554 @@ -1258,7 +1258,7 @@ def fetch(
4555 except TryAgain:
4556 writemsg(
4557 _(
4558 - ">>> File '%s' is already locked by "
4559 + ">>>> File '%s' is already locked by "
4560 "another fetcher. Continuing...\n"
4561 )
4562 % myfile,
4563 @@ -1289,7 +1289,7 @@ def fetch(
4564 except PortageException as e:
4565 if not os.access(myfile_path, os.R_OK):
4566 writemsg(
4567 - _("!!! Failed to adjust permissions:" " %s\n")
4568 + _("!!!! Failed to adjust permissions:" " %s\n")
4569 % str(e),
4570 noiselevel=-1,
4571 )
4572 @@ -1310,9 +1310,9 @@ def fetch(
4573 if stat.S_ISDIR(mystat.st_mode):
4574 writemsg_level(
4575 _(
4576 - "!!! Unable to fetch file since "
4577 + "!!!! Unable to fetch file since "
4578 "a directory is in the way: \n"
4579 - "!!! %s\n"
4580 + "!!!! %s\n"
4581 )
4582 % myfile_path,
4583 level=logging.ERROR,
4584 @@ -1361,7 +1361,7 @@ def fetch(
4585 # it instead of deleting it.
4586 writemsg(
4587 _(
4588 - ">>> Renaming distfile with size "
4589 + ">>>> Renaming distfile with size "
4590 "%d (smaller than "
4591 "PORTAGE_FETCH_RESU"
4592 "ME_MIN_SIZE)\n"
4593 @@ -1414,7 +1414,7 @@ def fetch(
4594 # the file is not already fetched
4595 if not has_space:
4596 writemsg(
4597 - _("!!! Insufficient space to store %s in %s\n")
4598 + _("!!!! Insufficient space to store %s in %s\n")
4599 % (myfile, mysettings["DISTDIR"]),
4600 noiselevel=-1,
4601 )
4602 @@ -1422,7 +1422,7 @@ def fetch(
4603 if has_space_superuser:
4604 writemsg(
4605 _(
4606 - "!!! Insufficient privileges to use "
4607 + "!!!! Insufficient privileges to use "
4608 "remaining space.\n"
4609 ),
4610 noiselevel=-1,
4611 @@ -1430,9 +1430,9 @@ def fetch(
4612 if userfetch:
4613 writemsg(
4614 _(
4615 - '!!! You may set FEATURES="-userfetch"'
4616 + '!!!! You may set FEATURES="-userfetch"'
4617 " in /etc/portage/make.conf in order to fetch with\n"
4618 - "!!! superuser privileges.\n"
4619 + "!!!! superuser privileges.\n"
4620 ),
4621 noiselevel=-1,
4622 )
4623 @@ -1471,7 +1471,7 @@ def fetch(
4624 except PortageException as e:
4625 if not os.access(download_path, os.R_OK):
4626 writemsg(
4627 - _("!!! Failed to adjust permissions:" " %s\n")
4628 + _("!!!! Failed to adjust permissions:" " %s\n")
4629 % (e,),
4630 noiselevel=-1,
4631 )
4632 @@ -1512,15 +1512,15 @@ def fetch(
4633 verified_ok, reason = verify_all(download_path, digests)
4634 if not verified_ok:
4635 writemsg(
4636 - _("!!! Previously fetched" " file: '%s'\n")
4637 + _("!!!! Previously fetched" " file: '%s'\n")
4638 % myfile,
4639 noiselevel=-1,
4640 )
4641 writemsg(
4642 - _("!!! Reason: %s\n") % reason[0], noiselevel=-1
4643 + _("!!!! Reason: %s\n") % reason[0], noiselevel=-1
4644 )
4645 writemsg(
4646 - _("!!! Got: %s\n" "!!! Expected: %s\n")
4647 + _("!!!! Got: %s\n" "!!! Expected: %s\n")
4648 % (reason[1], reason[2]),
4649 noiselevel=-1,
4650 )
4651 @@ -1594,8 +1594,8 @@ def fetch(
4652 if fetchcommand is None:
4653 writemsg_level(
4654 _(
4655 - "!!! %s is unset. It should "
4656 - "have been defined in\n!!! %s/make.globals.\n"
4657 + "!!!! %s is unset. It should "
4658 + "have been defined in\n!!!! %s/make.globals.\n"
4659 )
4660 % (fetchcommand_var, global_config_path),
4661 level=logging.ERROR,
4662 @@ -1605,7 +1605,7 @@ def fetch(
4663 if "${FILE}" not in fetchcommand:
4664 writemsg_level(
4665 _(
4666 - "!!! %s does not contain the required ${FILE}"
4667 + "!!!! %s does not contain the required ${FILE}"
4668 " parameter.\n"
4669 )
4670 % fetchcommand_var,
4671 @@ -1622,8 +1622,8 @@ def fetch(
4672 if resumecommand is None:
4673 writemsg_level(
4674 _(
4675 - "!!! %s is unset. It should "
4676 - "have been defined in\n!!! %s/make.globals.\n"
4677 + "!!!! %s is unset. It should "
4678 + "have been defined in\n!!!! %s/make.globals.\n"
4679 )
4680 % (resumecommand_var, global_config_path),
4681 level=logging.ERROR,
4682 @@ -1633,7 +1633,7 @@ def fetch(
4683 if "${FILE}" not in resumecommand:
4684 writemsg_level(
4685 _(
4686 - "!!! %s does not contain the required ${FILE}"
4687 + "!!!! %s does not contain the required ${FILE}"
4688 " parameter.\n"
4689 )
4690 % resumecommand_var,
4691 @@ -1645,8 +1645,8 @@ def fetch(
4692 if missing_file_param:
4693 writemsg_level(
4694 _(
4695 - "!!! Refer to the make.conf(5) man page for "
4696 - "information about how to\n!!! correctly specify "
4697 + "!!!! Refer to the make.conf(5) man page for "
4698 + "information about how to\n!!!! correctly specify "
4699 "FETCHCOMMAND and RESUMECOMMAND.\n"
4700 ),
4701 level=logging.ERROR,
4702 @@ -1667,14 +1667,14 @@ def fetch(
4703
4704 if mysize == 0:
4705 writemsg(
4706 - _("!!! File %s isn't fetched but unable to get it.\n")
4707 + _("!!!! File %s isn't fetched but unable to get it.\n")
4708 % myfile,
4709 noiselevel=-1,
4710 )
4711 elif size is None or size > mysize:
4712 writemsg(
4713 _(
4714 - "!!! File %s isn't fully fetched, but unable to complete it\n"
4715 + "!!!! File %s isn't fully fetched, but unable to complete it\n"
4716 )
4717 % myfile,
4718 noiselevel=-1,
4719 @@ -1682,7 +1682,7 @@ def fetch(
4720 else:
4721 writemsg(
4722 _(
4723 - "!!! File %s is incorrect size, "
4724 + "!!!! File %s is incorrect size, "
4725 "but unable to retry.\n"
4726 )
4727 % myfile,
4728 @@ -1705,7 +1705,7 @@ def fetch(
4729 if distdir_writable and mystat.st_size < fetch_resume_size:
4730 writemsg(
4731 _(
4732 - ">>> Deleting distfile with size "
4733 + ">>>> Deleting distfile with size "
4734 "%d (smaller than "
4735 "PORTAGE_FETCH_RESU"
4736 "ME_MIN_SIZE)\n"
4737 @@ -1721,14 +1721,16 @@ def fetch(
4738 fetched = 0
4739 if fetched == 1:
4740 # resume mode:
4741 - writemsg(_(">>> Resuming download...\n"))
4742 + writemsg(_(">>>> Resuming download...\n"))
4743 locfetch = resumecommand
4744 command_var = resumecommand_var
4745 else:
4746 # normal mode:
4747 locfetch = fetchcommand
4748 command_var = fetchcommand_var
4749 - writemsg_stdout(_(">>> Downloading '%s'\n") % _hide_url_passwd(loc))
4750 + writemsg_stdout(
4751 + _(">>>> Downloading '%s'\n") % _hide_url_passwd(loc)
4752 + )
4753 variables = {"URI": loc, "FILE": os.path.basename(download_path)}
4754
4755 try:
4756 @@ -1765,7 +1767,7 @@ def fetch(
4757 except PortageException as e:
4758 if not os.access(download_path, os.R_OK):
4759 writemsg(
4760 - _("!!! Failed to adjust permissions:" " %s\n")
4761 + _("!!!! Failed to adjust permissions:" " %s\n")
4762 % str(e),
4763 noiselevel=-1,
4764 )
4765 @@ -1802,8 +1804,8 @@ def fetch(
4766 # instead have -O.
4767 writemsg_level(
4768 _(
4769 - "!!! The command specified in the "
4770 - "%s variable appears to have\n!!! "
4771 + "!!!! The command specified in the "
4772 + "%s variable appears to have\n!!!! "
4773 "created a directory instead of a "
4774 "normal file.\n"
4775 )
4776 @@ -1813,9 +1815,9 @@ def fetch(
4777 )
4778 writemsg_level(
4779 _(
4780 - "!!! Refer to the make.conf(5) "
4781 + "!!!! Refer to the make.conf(5) "
4782 "man page for information about how "
4783 - "to\n!!! correctly specify "
4784 + "to\n!!!! correctly specify "
4785 "FETCHCOMMAND and RESUMECOMMAND.\n"
4786 ),
4787 level=logging.ERROR,
4788 @@ -1864,7 +1866,7 @@ def fetch(
4789 os.unlink(download_path)
4790 writemsg(
4791 _(
4792 - ">>> Deleting invalid distfile. (Improper 404 redirect from server.)\n"
4793 + ">>>> Deleting invalid distfile. (Improper 404 redirect from server.)\n"
4794 )
4795 )
4796 fetched = 0
4797 @@ -1886,15 +1888,16 @@ def fetch(
4798 verified_ok, reason = verify_all(download_path, digests)
4799 if not verified_ok:
4800 writemsg(
4801 - _("!!! Fetched file: %s VERIFY FAILED!\n")
4802 + _("!!!! Fetched file: %s VERIFY FAILED!\n")
4803 % myfile,
4804 noiselevel=-1,
4805 )
4806 writemsg(
4807 - _("!!! Reason: %s\n") % reason[0], noiselevel=-1
4808 + _("!!!! Reason: %s\n") % reason[0],
4809 + noiselevel=-1,
4810 )
4811 writemsg(
4812 - _("!!! Got: %s\n!!! Expected: %s\n")
4813 + _("!!!! Got: %s\n!!! Expected: %s\n")
4814 % (reason[1], reason[2]),
4815 noiselevel=-1,
4816 )
4817 @@ -1976,11 +1979,11 @@ def fetch(
4818 if restrict_fetch and not restrict_fetch_msg:
4819 restrict_fetch_msg = True
4820 msg = _(
4821 - "\n!!! %s/%s"
4822 + "\n!!!! %s/%s"
4823 " has fetch restriction turned on.\n"
4824 - "!!! This probably means that this "
4825 + "!!!! This probably means that this "
4826 "ebuild's files must be downloaded\n"
4827 - "!!! manually. See the comments in"
4828 + "!!!! manually. See the comments in"
4829 " the ebuild for more information.\n\n"
4830 ) % (mysettings["CATEGORY"], mysettings["PF"])
4831 writemsg_level(msg, level=logging.ERROR, noiselevel=-1)
4832 @@ -1995,7 +1998,8 @@ def fetch(
4833 )
4834 else:
4835 writemsg(
4836 - _("!!! Couldn't download '%s'. Aborting.\n") % myfile, noiselevel=-1
4837 + _("!!!! Couldn't download '%s'. Aborting.\n") % myfile,
4838 + noiselevel=-1,
4839 )
4840
4841 if listonly:
4842 diff --git a/lib/portage/package/ebuild/prepare_build_dirs.py b/lib/portage/package/ebuild/prepare_build_dirs.py
4843 index 41de1a3a9..2954accff 100644
4844 --- a/lib/portage/package/ebuild/prepare_build_dirs.py
4845 +++ b/lib/portage/package/ebuild/prepare_build_dirs.py
4846 @@ -279,19 +279,19 @@ def _prepare_features_dirs(mysettings):
4847 except DirectoryNotFound as e:
4848 failure = True
4849 writemsg(
4850 - _("\n!!! Directory does not exist: '%s'\n") % (e,), noiselevel=-1
4851 + _("\n!!!! Directory does not exist: '%s'\n") % (e,), noiselevel=-1
4852 )
4853 - writemsg(_("!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
4854 + writemsg(_("!!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
4855
4856 except PortageException as e:
4857 failure = True
4858 - writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
4859 + writemsg("\n!!!! %s\n" % str(e), noiselevel=-1)
4860 writemsg(
4861 - _("!!! Failed resetting perms on %s='%s'\n")
4862 + _("!!!! Failed resetting perms on %s='%s'\n")
4863 % (kwargs["basedir_var"], basedir),
4864 noiselevel=-1,
4865 )
4866 - writemsg(_("!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
4867 + writemsg(_("!!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
4868
4869 if failure:
4870 mysettings.features.remove(myfeature)
4871 @@ -314,13 +314,13 @@ def _prepare_workdir(mysettings):
4872 workdir_mode = parsed_mode
4873 except KeyError as e:
4874 writemsg(
4875 - _("!!! PORTAGE_WORKDIR_MODE is unset, using %s.\n") % oct(workdir_mode)
4876 + _("!!!! PORTAGE_WORKDIR_MODE is unset, using %s.\n") % oct(workdir_mode)
4877 )
4878 except ValueError as e:
4879 if len(str(e)) > 0:
4880 writemsg("%s\n" % e)
4881 writemsg(
4882 - _("!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n")
4883 + _("!!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n")
4884 % (mysettings["PORTAGE_WORKDIR_MODE"], oct(workdir_mode))
4885 )
4886 mysettings["PORTAGE_WORKDIR_MODE"] = oct(workdir_mode).replace("o", "")
4887 @@ -356,13 +356,13 @@ def _prepare_workdir(mysettings):
4888 mode=0o2770,
4889 )
4890 except PortageException as e:
4891 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
4892 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
4893 writemsg(
4894 - _("!!! Permission issues with PORTAGE_LOGDIR='%s'\n")
4895 + _("!!!! Permission issues with PORTAGE_LOGDIR='%s'\n")
4896 % mysettings["PORTAGE_LOGDIR"],
4897 noiselevel=-1,
4898 )
4899 - writemsg(_("!!! Disabling logging.\n"), noiselevel=-1)
4900 + writemsg(_("!!!! Disabling logging.\n"), noiselevel=-1)
4901 while "PORTAGE_LOGDIR" in mysettings:
4902 del mysettings["PORTAGE_LOGDIR"]
4903
4904 @@ -409,13 +409,14 @@ def _prepare_workdir(mysettings):
4905 try:
4906 _ensure_log_subdirs(logdir, log_subdir)
4907 except PortageException as e:
4908 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
4909 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
4910
4911 if os.access(log_subdir, os.W_OK):
4912 logdir_subdir_ok = True
4913 else:
4914 writemsg(
4915 - "!!! %s: %s\n" % (_("Permission Denied"), log_subdir), noiselevel=-1
4916 + "!!!! %s: %s\n" % (_("Permission Denied"), log_subdir),
4917 + noiselevel=-1,
4918 )
4919
4920 tmpdir_log_path = os.path.join(mysettings["T"], "build.log%s" % compress_log_ext)
4921 diff --git a/lib/portage/repository/config.py b/lib/portage/repository/config.py
4922 index 0b591d94f..0f9ffa5de 100644
4923 --- a/lib/portage/repository/config.py
4924 +++ b/lib/portage/repository/config.py
4925 @@ -291,7 +291,8 @@ class RepoConfig:
4926 v = int(v)
4927 except (OverflowError, ValueError):
4928 writemsg(
4929 - _("!!! Invalid %s setting for repo" " %s: %s\n") % (k, name, v),
4930 + _("!!!! Invalid %s setting for repo" " %s: %s\n")
4931 + % (k, name, v),
4932 noiselevel=-1,
4933 )
4934 v = None
4935 @@ -621,7 +622,7 @@ class RepoConfigLoader:
4936 # File "/usr/lib/python3.2/shlex.py", line 168, in read_token
4937 # raise ValueError("No closing quotation")
4938 writemsg(
4939 - _("!!! Invalid PORTDIR_OVERLAY:" " %s: %s\n") % (e, portdir_overlay),
4940 + _("!!!! Invalid PORTDIR_OVERLAY:" " %s: %s\n") % (e, portdir_overlay),
4941 noiselevel=-1,
4942 )
4943 port_ov = []
4944 @@ -724,7 +725,7 @@ class RepoConfigLoader:
4945
4946 if not portage._sync_mode:
4947 writemsg(
4948 - _("!!! Invalid PORTDIR_OVERLAY (not a dir): '%s'\n") % ov,
4949 + _("!!!! Invalid PORTDIR_OVERLAY (not a dir): '%s'\n") % ov,
4950 noiselevel=-1,
4951 )
4952
4953 @@ -799,7 +800,7 @@ class RepoConfigLoader:
4954 self._parse(paths, prepos, settings.local_config, default_opts)
4955 except ConfigParserError as e:
4956 writemsg(
4957 - _("!!! Error while reading repo config file: %s\n") % e, noiselevel=-1
4958 + _("!!!! Error while reading repo config file: %s\n") % e, noiselevel=-1
4959 )
4960 # The configparser state is unreliable (prone to quirky
4961 # exceptions) after it has thrown an error, so use empty
4962 @@ -850,7 +851,7 @@ class RepoConfigLoader:
4963 # Skip this warning for repoman (bug #474578).
4964 if settings.local_config and paths:
4965 writemsg_level(
4966 - "!!! %s\n"
4967 + "!!!! %s\n"
4968 % _(
4969 "Section '%s' in repos.conf is missing location attribute"
4970 )
4971 @@ -864,7 +865,7 @@ class RepoConfigLoader:
4972 if not portage._sync_mode:
4973 if not isdir_raise_eaccess(repo.location):
4974 writemsg_level(
4975 - "!!! %s\n"
4976 + "!!!! %s\n"
4977 % _(
4978 "Section '%s' in repos.conf has location attribute set "
4979 "to nonexistent directory: '%s'"
4980 @@ -884,7 +885,7 @@ class RepoConfigLoader:
4981 # if repo.missing_repo_name:
4982 if repo.missing_repo_name and repo.name != repo_name:
4983 writemsg_level(
4984 - "!!! %s\n"
4985 + "!!!! %s\n"
4986 % _(
4987 "Section '%s' in repos.conf refers to repository "
4988 "without repository name set in '%s'"
4989 @@ -898,7 +899,7 @@ class RepoConfigLoader:
4990
4991 if repo.name != repo_name:
4992 writemsg_level(
4993 - "!!! %s\n"
4994 + "!!!! %s\n"
4995 % _(
4996 "Section '%s' in repos.conf has name different "
4997 "from repository name '%s' set inside repository"
4998 @@ -928,7 +929,7 @@ class RepoConfigLoader:
4999 continue
5000 writemsg_level(
5001 _(
5002 - "!!! Repository name or alias '%s', "
5003 + "!!!! Repository name or alias '%s', "
5004 + "defined for repository '%s', overrides "
5005 + "existing alias or repository.\n"
5006 )
5007 @@ -957,7 +958,7 @@ class RepoConfigLoader:
5008 prepos["DEFAULT"].main_repo = None
5009 if portdir and not portage._sync_mode:
5010 writemsg(
5011 - _("!!! main-repo not set in DEFAULT and PORTDIR is empty.\n"),
5012 + _("!!!! main-repo not set in DEFAULT and PORTDIR is empty.\n"),
5013 noiselevel=-1,
5014 )
5015
5016 @@ -970,7 +971,7 @@ class RepoConfigLoader:
5017 if portdir_sync and main_repo is not None:
5018 writemsg(
5019 _(
5020 - "!!! SYNC setting found in make.conf.\n "
5021 + "!!!! SYNC setting found in make.conf.\n "
5022 "This setting is Deprecated and no longer used. "
5023 "Please ensure your 'sync-type' and 'sync-uri' are set correctly"
5024 " in /etc/portage/repos.conf/gentoo.conf\n"
5025 @@ -1097,13 +1098,13 @@ class RepoConfigLoader:
5026 ):
5027 # TODO: Delete masters code in lib/portage/tests/resolver/ResolverPlayground.py when deleting this warning.
5028 writemsg_level(
5029 - "!!! %s\n"
5030 + "!!!! %s\n"
5031 % _("Repository '%s' is missing masters attribute in '%s'")
5032 % (
5033 repo.name,
5034 os.path.join(repo.location, "metadata", "layout.conf"),
5035 )
5036 - + "!!! %s\n"
5037 + + "!!!! %s\n"
5038 % _("Set 'masters = %s' in this file for future compatibility")
5039 % self.mainRepo().name,
5040 level=logging.WARNING,
5041 @@ -1147,14 +1148,14 @@ class RepoConfigLoader:
5042 if name != "DEFAULT":
5043 if r.location is None:
5044 writemsg(
5045 - _("!!! Location not set for repository %s\n") % name,
5046 + _("!!!! Location not set for repository %s\n") % name,
5047 noiselevel=-1,
5048 )
5049 else:
5050 if not isdir_raise_eaccess(r.location) and not portage._sync_mode:
5051 self.prepos_order.remove(name)
5052 writemsg(
5053 - _("!!! Invalid Repository Location" " (not a dir): '%s'\n")
5054 + _("!!!! Invalid Repository Location" " (not a dir): '%s'\n")
5055 % r.location,
5056 noiselevel=-1,
5057 )
5058 diff --git a/lib/portage/sync/config_checks.py b/lib/portage/sync/config_checks.py
5059 index a73e0dc88..1f270dfcf 100644
5060 --- a/lib/portage/sync/config_checks.py
5061 +++ b/lib/portage/sync/config_checks.py
5062 @@ -18,7 +18,7 @@ from portage.util import writemsg_level
5063 def check_type(repo, logger, module_names):
5064 if repo.sync_uri is not None and repo.sync_type is None:
5065 writemsg_level(
5066 - "!!! %s\n"
5067 + "!!!! %s\n"
5068 % _(
5069 "Repository '%s' has sync-uri attribute, but is missing sync-type attribute"
5070 )
5071 @@ -29,7 +29,7 @@ def check_type(repo, logger, module_names):
5072 return False
5073 if repo.sync_type not in module_names + [None]:
5074 writemsg_level(
5075 - "!!! %s\n"
5076 + "!!!! %s\n"
5077 % _(
5078 "Repository '%s' has sync-type attribute set to unsupported value: '%s'"
5079 )
5080 @@ -38,7 +38,7 @@ def check_type(repo, logger, module_names):
5081 noiselevel=-1,
5082 )
5083 writemsg_level(
5084 - "!!! %s\n" % _("Installed sync-types are: '%s'") % (str(module_names)),
5085 + "!!!! %s\n" % _("Installed sync-types are: '%s'") % (str(module_names)),
5086 level=logger.ERROR,
5087 noiselevel=-1,
5088 )
5089 @@ -68,7 +68,7 @@ class CheckSyncConfig:
5090 """Check the sync_uri setting"""
5091 if self.repo.sync_uri is None:
5092 writemsg_level(
5093 - "!!! %s\n"
5094 + "!!!! %s\n"
5095 % _(
5096 "Repository '%s' has sync-type attribute, but is missing sync-uri attribute"
5097 )
5098 @@ -81,7 +81,7 @@ class CheckSyncConfig:
5099 """Check the auto_sync setting"""
5100 if self.repo.auto_sync is None:
5101 writemsg_level(
5102 - "!!! %s\n"
5103 + "!!!! %s\n"
5104 % _("Repository '%s' is missing auto_sync attribute")
5105 % self.repo.name,
5106 level=self.logger.ERROR,
5107 @@ -89,7 +89,7 @@ class CheckSyncConfig:
5108 )
5109 elif self.repo.auto_sync.lower() not in ["yes", "true", "no", "false"]:
5110 writemsg_level(
5111 - "!!! %s\n"
5112 + "!!!! %s\n"
5113 % _("Repository '%s' auto_sync attribute must be one of: %s")
5114 % (self.repo.name, "{yes, true, no, false}"),
5115 level=self.logger.ERROR,
5116 diff --git a/lib/portage/sync/controller.py b/lib/portage/sync/controller.py
5117 index 987aa5481..d7031db9c 100644
5118 --- a/lib/portage/sync/controller.py
5119 +++ b/lib/portage/sync/controller.py
5120 @@ -212,7 +212,7 @@ class SyncManager:
5121 return succeeded
5122
5123 def pre_sync(self, repo):
5124 - msg = ">>> Syncing repository '%s' into '%s'..." % (repo.name, repo.location)
5125 + msg = ">>>> Syncing repository '%s' into '%s'..." % (repo.name, repo.location)
5126 self.logger(self.xterm_titles, msg)
5127 writemsg_level(msg + "\n")
5128 try:
5129 @@ -248,7 +248,7 @@ class SyncManager:
5130 pw = pwd.getpwuid(int(username))
5131 except (ValueError, KeyError):
5132 writemsg(
5133 - "!!! User '%s' invalid or does not exist\n" % username,
5134 + "!!!! User '%s' invalid or does not exist\n" % username,
5135 noiselevel=-1,
5136 )
5137 return (logname, user, group, home)
5138 @@ -266,7 +266,7 @@ class SyncManager:
5139 pw = grp.getgrgid(int(groupname))
5140 except (ValueError, KeyError):
5141 writemsg(
5142 - "!!! Group '%s' invalid or does not exist\n" % groupname,
5143 + "!!!! Group '%s' invalid or does not exist\n" % groupname,
5144 noiselevel=-1,
5145 )
5146 return (logname, user, group, home)
5147 diff --git a/lib/portage/sync/modules/cvs/__init__.py b/lib/portage/sync/modules/cvs/__init__.py
5148 index 344a7f847..3d7373272 100644
5149 --- a/lib/portage/sync/modules/cvs/__init__.py
5150 +++ b/lib/portage/sync/modules/cvs/__init__.py
5151 @@ -18,7 +18,7 @@ class CheckCVSConfig(CheckSyncConfig):
5152 def check_cvs_repo(self):
5153 if self.repo.module_specific_options.get("sync-cvs-repo") is None:
5154 writemsg_level(
5155 - "!!! %s\n"
5156 + "!!!! %s\n"
5157 % _(
5158 "Repository '%s' has sync-type=cvs, but is missing sync-cvs-repo attribute"
5159 )
5160 diff --git a/lib/portage/sync/modules/cvs/cvs.py b/lib/portage/sync/modules/cvs/cvs.py
5161 index 722f54ab4..07a92d423 100644
5162 --- a/lib/portage/sync/modules/cvs/cvs.py
5163 +++ b/lib/portage/sync/modules/cvs/cvs.py
5164 @@ -45,7 +45,7 @@ class CVSSync(NewBase):
5165 )
5166 != os.EX_OK
5167 ):
5168 - msg = "!!! cvs checkout error; exiting."
5169 + msg = "!!!! cvs checkout error; exiting."
5170 self.logger(self.xterm_titles, msg)
5171 writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
5172 return (1, False)
5173 @@ -67,7 +67,7 @@ class CVSSync(NewBase):
5174 **self.spawn_kwargs
5175 )
5176 if exitcode != os.EX_OK:
5177 - msg = "!!! cvs update error; exiting."
5178 + msg = "!!!! cvs update error; exiting."
5179 self.logger(self.xterm_titles, msg)
5180 writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
5181 return (exitcode, False)
5182 diff --git a/lib/portage/sync/modules/git/__init__.py b/lib/portage/sync/modules/git/__init__.py
5183 index ef32a9da0..4d3777936 100644
5184 --- a/lib/portage/sync/modules/git/__init__.py
5185 +++ b/lib/portage/sync/modules/git/__init__.py
5186 @@ -28,7 +28,7 @@ class CheckGitConfig(CheckSyncConfig):
5187 d = int(d)
5188 except ValueError:
5189 writemsg_level(
5190 - "!!! %s\n"
5191 + "!!!! %s\n"
5192 % _("%s value is not a number: '%s'")
5193 % (attr.replace("_", "-"), d),
5194 level=self.logger.ERROR,
5195 @@ -44,7 +44,7 @@ class CheckGitConfig(CheckSyncConfig):
5196
5197 if v not in ("yes", "no", "true", "false"):
5198 writemsg_level(
5199 - "!!! %s\n"
5200 + "!!!! %s\n"
5201 % _("sync-git-verify-commit-signature not one of: %s")
5202 % ("{yes, no, true, false}"),
5203 level=self.logger.ERROR,
5204 diff --git a/lib/portage/sync/modules/git/git.py b/lib/portage/sync/modules/git/git.py
5205 index 98670e1f9..fa92bb657 100644
5206 --- a/lib/portage/sync/modules/git/git.py
5207 +++ b/lib/portage/sync/modules/git/git.py
5208 @@ -107,7 +107,7 @@ class GitSync(NewBase):
5209 **self.spawn_kwargs
5210 )
5211 if exitcode != os.EX_OK:
5212 - msg = "!!! git clone error in %s" % self.repo.location
5213 + msg = "!!!! git clone error in %s" % self.repo.location
5214 self.logger(self.xterm_titles, msg)
5215 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5216 return (exitcode, False)
5217 @@ -166,7 +166,7 @@ class GitSync(NewBase):
5218 )
5219 ).rstrip("\n")
5220 except subprocess.CalledProcessError as e:
5221 - msg = "!!! git rev-parse error in %s" % self.repo.location
5222 + msg = "!!!! git rev-parse error in %s" % self.repo.location
5223 self.logger(self.xterm_titles, msg)
5224 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5225 return (e.returncode, False)
5226 @@ -187,7 +187,7 @@ class GitSync(NewBase):
5227 **self.spawn_kwargs
5228 )
5229 if exitcode != os.EX_OK:
5230 - msg = "!!! git gc error in %s" % self.repo.location
5231 + msg = "!!!! git gc error in %s" % self.repo.location
5232 self.logger(self.xterm_titles, msg)
5233 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5234 return (exitcode, False)
5235 @@ -211,7 +211,7 @@ class GitSync(NewBase):
5236 )
5237
5238 if exitcode != os.EX_OK:
5239 - msg = "!!! git fetch error in %s" % self.repo.location
5240 + msg = "!!!! git fetch error in %s" % self.repo.location
5241 self.logger(self.xterm_titles, msg)
5242 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5243 return (exitcode, False)
5244 @@ -235,7 +235,7 @@ class GitSync(NewBase):
5245 )
5246
5247 if exitcode != os.EX_OK:
5248 - msg = "!!! git merge error in %s" % self.repo.location
5249 + msg = "!!!! git merge error in %s" % self.repo.location
5250 self.logger(self.xterm_titles, msg)
5251 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5252 return (exitcode, False)
5253 @@ -254,7 +254,7 @@ class GitSync(NewBase):
5254
5255 if self.repo.sync_openpgp_key_path is not None and gemato is None:
5256 writemsg_level(
5257 - "!!! Verifying against specified key requires gemato-14.5+ installed\n",
5258 + "!!!! Verifying against specified key requires gemato-14.5+ installed\n",
5259 level=logging.ERROR,
5260 noiselevel=-1,
5261 )
5262 @@ -273,7 +273,7 @@ class GitSync(NewBase):
5263 self._refresh_keys(openpgp_env)
5264 except (GematoException, asyncio.TimeoutError) as e:
5265 writemsg_level(
5266 - "!!! Verification impossible due to keyring problem:\n%s\n"
5267 + "!!!! Verification impossible due to keyring problem:\n%s\n"
5268 % (e,),
5269 level=logging.ERROR,
5270 noiselevel=-1,
5271 diff --git a/lib/portage/sync/modules/mercurial/mercurial.py b/lib/portage/sync/modules/mercurial/mercurial.py
5272 index 486b4fdd6..c410bf4e1 100644
5273 --- a/lib/portage/sync/modules/mercurial/mercurial.py
5274 +++ b/lib/portage/sync/modules/mercurial/mercurial.py
5275 @@ -87,7 +87,7 @@ class MercurialSync(NewBase):
5276 **self.spawn_kwargs
5277 )
5278 if exitcode != os.EX_OK:
5279 - msg = "!!! hg clone error in %s" % self.repo.location
5280 + msg = "!!!! hg clone error in %s" % self.repo.location
5281 self.logger(self.xterm_titles, msg)
5282 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5283 return (exitcode, False)
5284 @@ -144,7 +144,7 @@ class MercurialSync(NewBase):
5285 **self.spawn_kwargs
5286 )
5287 if exitcode != os.EX_OK:
5288 - msg = "!!! hg pull error in %s" % self.repo.location
5289 + msg = "!!!! hg pull error in %s" % self.repo.location
5290 self.logger(self.xterm_titles, msg)
5291 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5292 return (exitcode, False)
5293 diff --git a/lib/portage/sync/modules/rsync/rsync.py b/lib/portage/sync/modules/rsync/rsync.py
5294 index 5f4cf1aeb..4c7b7c0f4 100644
5295 --- a/lib/portage/sync/modules/rsync/rsync.py
5296 +++ b/lib/portage/sync/modules/rsync/rsync.py
5297 @@ -71,8 +71,8 @@ class RsyncSync(NewBase):
5298 for vcs_dir in vcs_dirs:
5299 writemsg_level(
5300 (
5301 - "!!! %s appears to be under revision "
5302 - + "control (contains %s).\n!!! Aborting rsync sync "
5303 + "!!!! %s appears to be under revision "
5304 + + "control (contains %s).\n!!!! Aborting rsync sync "
5305 '(override with "sync-rsync-vcs-ignore = true" in repos.conf).\n'
5306 )
5307 % (self.repo.location, vcs_dir),
5308 @@ -117,7 +117,7 @@ class RsyncSync(NewBase):
5309 raise ValueError(self.verify_jobs)
5310 except ValueError:
5311 writemsg_level(
5312 - "!!! sync-rsync-verify-jobs not a positive integer: %s\n"
5313 + "!!!! sync-rsync-verify-jobs not a positive integer: %s\n"
5314 % (self.verify_jobs,),
5315 level=logging.WARNING,
5316 noiselevel=-1,
5317 @@ -139,7 +139,7 @@ class RsyncSync(NewBase):
5318 raise ValueError(self.max_age)
5319 except ValueError:
5320 writemsg_level(
5321 - "!!! sync-rsync-max-age must be a non-negative integer: %s\n"
5322 + "!!!! sync-rsync-max-age must be a non-negative integer: %s\n"
5323 % (self.max_age,),
5324 level=logging.WARNING,
5325 noiselevel=-1,
5326 @@ -166,7 +166,7 @@ class RsyncSync(NewBase):
5327 self._refresh_keys(openpgp_env)
5328 except (GematoException, asyncio.TimeoutError) as e:
5329 writemsg_level(
5330 - "!!! Manifest verification impossible due to keyring problem:\n%s\n"
5331 + "!!!! Manifest verification impossible due to keyring problem:\n%s\n"
5332 % (e,),
5333 level=logging.ERROR,
5334 noiselevel=-1,
5335 @@ -225,7 +225,7 @@ class RsyncSync(NewBase):
5336 )[1:5]
5337 except ValueError:
5338 writemsg_level(
5339 - "!!! sync-uri is invalid: %s\n" % syncuri,
5340 + "!!!! sync-uri is invalid: %s\n" % syncuri,
5341 noiselevel=-1,
5342 level=logging.ERROR,
5343 )
5344 @@ -266,7 +266,7 @@ class RsyncSync(NewBase):
5345 )
5346 except socket.error as e:
5347 writemsg_level(
5348 - "!!! getaddrinfo failed for '%s': %s\n"
5349 + "!!!! getaddrinfo failed for '%s': %s\n"
5350 % (_unicode_decode(hostname), str(e)),
5351 noiselevel=-1,
5352 level=logging.ERROR,
5353 @@ -334,7 +334,7 @@ class RsyncSync(NewBase):
5354 dosyncuri = uris.pop()
5355 elif maxretries < 0 or retries > maxretries:
5356 writemsg(
5357 - "!!! Exhausted addresses for %s\n" % _unicode_decode(hostname),
5358 + "!!!! Exhausted addresses for %s\n" % _unicode_decode(hostname),
5359 noiselevel=-1,
5360 )
5361 return (1, False)
5362 @@ -360,18 +360,18 @@ class RsyncSync(NewBase):
5363 print()
5364 sys.exit(128 + signal.SIGINT)
5365 self.logger(
5366 - self.xterm_titles, ">>> Starting rsync with " + dosyncuri
5367 + self.xterm_titles, ">>>> Starting rsync with " + dosyncuri
5368 )
5369 if "--quiet" not in opts:
5370 - print(">>> Starting rsync with " + dosyncuri + "...")
5371 + print(">>>> Starting rsync with " + dosyncuri + "...")
5372 else:
5373 self.logger(
5374 self.xterm_titles,
5375 - ">>> Starting retry %d of %d with %s"
5376 + ">>>> Starting retry %d of %d with %s"
5377 % (retries, effective_maxretries, dosyncuri),
5378 )
5379 writemsg_stdout(
5380 - "\n\n>>> Starting retry %d of %d with %s\n"
5381 + "\n\n>>>> Starting retry %d of %d with %s\n"
5382 % (retries, effective_maxretries, dosyncuri),
5383 noiselevel=-1,
5384 )
5385 @@ -390,7 +390,7 @@ class RsyncSync(NewBase):
5386 retries = retries + 1
5387
5388 if maxretries < 0 or retries <= maxretries:
5389 - print(">>> Retrying...")
5390 + print(">>>> Retrying...")
5391 else:
5392 # over retries
5393 # exit loop
5394 @@ -411,7 +411,7 @@ class RsyncSync(NewBase):
5395 if exitcode == 0 and self.verify_metamanifest:
5396 if gemato is None:
5397 writemsg_level(
5398 - "!!! Unable to verify: gemato-14.5+ is required\n",
5399 + "!!!! Unable to verify: gemato-14.5+ is required\n",
5400 level=logging.ERROR,
5401 noiselevel=-1,
5402 )
5403 @@ -469,7 +469,7 @@ class RsyncSync(NewBase):
5404 out.eend(0)
5405 except GematoException as e:
5406 writemsg_level(
5407 - "!!! Manifest verification failed:\n%s\n" % (e,),
5408 + "!!!! Manifest verification failed:\n%s\n" % (e,),
5409 level=logging.ERROR,
5410 noiselevel=-1,
5411 )
5412 @@ -495,7 +495,7 @@ class RsyncSync(NewBase):
5413 elif exitcode == SERVER_OUT_OF_DATE:
5414 exitcode = 1
5415 elif exitcode == EXCEEDED_MAX_RETRIES:
5416 - sys.stderr.write(">>> Exceeded PORTAGE_RSYNC_RETRIES: %s\n" % maxretries)
5417 + sys.stderr.write(">>>> Exceeded PORTAGE_RSYNC_RETRIES: %s\n" % maxretries)
5418 exitcode = 1
5419 elif exitcode > 0:
5420 msg = []
5421 @@ -657,7 +657,7 @@ class RsyncSync(NewBase):
5422 updatecache_flg = False
5423 is_synced = False
5424 if timestamp != 0 and "--quiet" not in opts:
5425 - print(">>> Checking server timestamp ...")
5426 + print(">>>> Checking server timestamp ...")
5427
5428 rsynccommand = [self.bin_command] + self.rsync_opts + self.extra_rsync_opts
5429
5430 @@ -762,34 +762,34 @@ class RsyncSync(NewBase):
5431 local_state_unchanged = True
5432 is_synced = True
5433 self.logger(
5434 - self.xterm_titles, ">>> Cancelling sync -- Already current."
5435 + self.xterm_titles, ">>>> Cancelling sync -- Already current."
5436 )
5437 print()
5438 - print(">>>")
5439 + print(">>>>")
5440 print(
5441 - ">>> Timestamps on the server and in the local repository are the same."
5442 + ">>>> Timestamps on the server and in the local repository are the same."
5443 )
5444 print(
5445 - ">>> Cancelling all further sync action. You are already up to date."
5446 + ">>>> Cancelling all further sync action. You are already up to date."
5447 )
5448 - print(">>>")
5449 + print(">>>>")
5450 print(
5451 - ">>> In order to force sync, remove '%s'."
5452 + ">>>> In order to force sync, remove '%s'."
5453 % self.servertimestampfile
5454 )
5455 - print(">>>")
5456 + print(">>>>")
5457 print()
5458 elif (servertimestamp != 0) and (servertimestamp < timestamp):
5459 - self.logger(self.xterm_titles, ">>> Server out of date: %s" % syncuri)
5460 + self.logger(self.xterm_titles, ">>>> Server out of date: %s" % syncuri)
5461 print()
5462 - print(">>>")
5463 - print(">>> SERVER OUT OF DATE: %s" % syncuri)
5464 - print(">>>")
5465 + print(">>>>")
5466 + print(">>>> SERVER OUT OF DATE: %s" % syncuri)
5467 + print(">>>>")
5468 print(
5469 - ">>> In order to force sync, remove '%s'."
5470 + ">>>> In order to force sync, remove '%s'."
5471 % self.servertimestampfile
5472 )
5473 - print(">>>")
5474 + print(">>>>")
5475 print()
5476 exitcode = SERVER_OUT_OF_DATE
5477 elif (servertimestamp == 0) or (servertimestamp > timestamp):
5478 diff --git a/lib/portage/sync/modules/svn/svn.py b/lib/portage/sync/modules/svn/svn.py
5479 index 788e394cd..9a2312337 100644
5480 --- a/lib/portage/sync/modules/svn/svn.py
5481 +++ b/lib/portage/sync/modules/svn/svn.py
5482 @@ -39,7 +39,7 @@ class SVNSync(NewBase):
5483 **self.spawn_kwargs
5484 )
5485 if exitcode != os.EX_OK:
5486 - msg = "!!! svn checkout error; exiting."
5487 + msg = "!!!! svn checkout error; exiting."
5488 self.logger(self.xterm_titles, msg)
5489 writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
5490 return (exitcode, False)
5491 @@ -63,7 +63,7 @@ class SVNSync(NewBase):
5492 **self.spawn_kwargs
5493 )
5494 if exitcode != os.EX_OK:
5495 - msg = "!!! svn update error; exiting."
5496 + msg = "!!!! svn update error; exiting."
5497 self.logger(self.xterm_titles, msg)
5498 writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
5499 return (exitcode, False)
5500 @@ -81,7 +81,7 @@ class SVNSync(NewBase):
5501 **self.spawn_kwargs
5502 )
5503 if exitcode != os.EX_OK:
5504 - msg = "!!! svn upgrade error; exiting."
5505 + msg = "!!!! svn upgrade error; exiting."
5506 self.logger(self.xterm_titles, msg)
5507 writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
5508 return exitcode
5509 diff --git a/lib/portage/sync/modules/webrsync/webrsync.py b/lib/portage/sync/modules/webrsync/webrsync.py
5510 index 0e2f63472..d427f346f 100644
5511 --- a/lib/portage/sync/modules/webrsync/webrsync.py
5512 +++ b/lib/portage/sync/modules/webrsync/webrsync.py
5513 @@ -70,7 +70,7 @@ class WebRsync(SyncBase):
5514
5515 if not self.repo.sync_openpgp_key_path:
5516 writemsg_level(
5517 - "!!! sync-openpgp-key-path is not set\n",
5518 + "!!!! sync-openpgp-key-path is not set\n",
5519 level=logging.ERROR,
5520 noiselevel=-1,
5521 )
5522 @@ -78,7 +78,7 @@ class WebRsync(SyncBase):
5523
5524 if not os.path.isfile(self.repo.sync_openpgp_key_path):
5525 writemsg_level(
5526 - "!!! sync-openpgp-key-path file not found: %s\n"
5527 + "!!!! sync-openpgp-key-path file not found: %s\n"
5528 % self.repo.sync_openpgp_key_path,
5529 level=logging.ERROR,
5530 noiselevel=-1,
5531 @@ -87,7 +87,7 @@ class WebRsync(SyncBase):
5532
5533 if gemato is None:
5534 writemsg_level(
5535 - "!!! Verifying against specified key requires gemato-14.5+ installed\n",
5536 + "!!!! Verifying against specified key requires gemato-14.5+ installed\n",
5537 level=logging.ERROR,
5538 noiselevel=-1,
5539 )
5540 @@ -105,7 +105,7 @@ class WebRsync(SyncBase):
5541 self.spawn_kwargs["env"]["PORTAGE_TEMP_GPG_DIR"] = openpgp_env.home
5542 except (GematoException, asyncio.TimeoutError) as e:
5543 writemsg_level(
5544 - "!!! Verification impossible due to keyring problem:\n%s\n"
5545 + "!!!! Verification impossible due to keyring problem:\n%s\n"
5546 % (e,),
5547 level=logging.ERROR,
5548 noiselevel=-1,
5549 @@ -125,7 +125,7 @@ class WebRsync(SyncBase):
5550
5551 exitcode = portage.process.spawn(webrsync_cmd, **self.spawn_kwargs)
5552 if exitcode != os.EX_OK:
5553 - msg = "!!! emerge-webrsync error in %s" % self.repo.location
5554 + msg = "!!!! emerge-webrsync error in %s" % self.repo.location
5555 self.logger(self.xterm_titles, msg)
5556 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
5557 return (exitcode, False)
5558 diff --git a/lib/portage/sync/old_tree_timestamp.py b/lib/portage/sync/old_tree_timestamp.py
5559 index 3558a25ad..01fc95d57 100644
5560 --- a/lib/portage/sync/old_tree_timestamp.py
5561 +++ b/lib/portage/sync/old_tree_timestamp.py
5562 @@ -82,7 +82,7 @@ def old_tree_timestamp_warn(portdir, settings):
5563 warnsync = float(settings.get(var_name, default_warnsync))
5564 except ValueError:
5565 writemsg_level(
5566 - "!!! %s contains non-numeric value: %s\n" % (var_name, settings[var_name]),
5567 + "!!!! %s contains non-numeric value: %s\n" % (var_name, settings[var_name]),
5568 level=logging.ERROR,
5569 noiselevel=-1,
5570 )
5571 diff --git a/lib/portage/sync/syncbase.py b/lib/portage/sync/syncbase.py
5572 index 94c873e1f..aa33f3312 100644
5573 --- a/lib/portage/sync/syncbase.py
5574 +++ b/lib/portage/sync/syncbase.py
5575 @@ -67,13 +67,13 @@ class SyncBase:
5576 % (self.bin_pkg, self._bin_command),
5577 ]
5578 for l in msg:
5579 - writemsg_level("!!! %s\n" % l, level=logging.ERROR, noiselevel=-1)
5580 + writemsg_level("!!!! %s\n" % l, level=logging.ERROR, noiselevel=-1)
5581 return False
5582
5583 try:
5584 self.repo_storage
5585 except RepoStorageException as e:
5586 - writemsg_level("!!! %s\n" % (e,), level=logging.ERROR, noiselevel=-1)
5587 + writemsg_level("!!!! %s\n" % (e,), level=logging.ERROR, noiselevel=-1)
5588 return False
5589
5590 return True
5591 @@ -240,7 +240,7 @@ class SyncBase:
5592 if errors:
5593 lines = []
5594 lines.append("")
5595 - lines.append("!!! Retry disabled for openpgp key refresh:")
5596 + lines.append("!!!! Retry disabled for openpgp key refresh:")
5597 lines.append("")
5598 for msg in errors:
5599 lines.append(" {}".format(msg))
5600 diff --git a/lib/portage/tests/resolver/test_autounmask.py b/lib/portage/tests/resolver/test_autounmask.py
5601 index 4e98e5bfc..f9d1b67b4 100644
5602 --- a/lib/portage/tests/resolver/test_autounmask.py
5603 +++ b/lib/portage/tests/resolver/test_autounmask.py
5604 @@ -320,7 +320,7 @@ class AutounmaskTestCase(TestCase):
5605 # # required by =app-portage/A-1 (argument)
5606 # >=app-portage/B-1 foo
5607 #
5608 - # !!! The ebuild selected to satisfy "app-portage/B[foo]" has unmet requirements.
5609 + # !!!! The ebuild selected to satisfy "app-portage/B[foo]" has unmet requirements.
5610 # - app-portage/B-1::test_repo USE="bar (forced-flag) -foo"
5611 #
5612 # The following REQUIRED_USE flag constraints are unsatisfied:
5613 @@ -337,7 +337,7 @@ class AutounmaskTestCase(TestCase):
5614 # # required by =app-portage/A-2 (argument)
5615 # >=app-portage/B-1 foo
5616 #
5617 - # !!! The ebuild selected to satisfy "app-portage/B[foo=]" has unmet requirements.
5618 + # !!!! The ebuild selected to satisfy "app-portage/B[foo=]" has unmet requirements.
5619 # - app-portage/B-1::test_repo USE="bar (forced-flag) -foo"
5620 #
5621 # The following REQUIRED_USE flag constraints are unsatisfied:
5622 @@ -363,7 +363,7 @@ class AutounmaskTestCase(TestCase):
5623 # # required by sci-mathematics/octave (argument)
5624 # >=x11-libs/qscintilla-2.9.4 qt5
5625 #
5626 - # !!! The ebuild selected to satisfy ">=x11-libs/qscintilla-2.9.3-r2:=[qt5(+)]" has unmet requirements.
5627 + # !!!! The ebuild selected to satisfy ">=x11-libs/qscintilla-2.9.3-r2:=[qt5(+)]" has unmet requirements.
5628 # - x11-libs/qscintilla-2.9.4::test_repo USE="qt4 -qt5"
5629 #
5630 # The following REQUIRED_USE flag constraints are unsatisfied:
5631 diff --git a/lib/portage/tests/resolver/test_autounmask_use_breakage.py b/lib/portage/tests/resolver/test_autounmask_use_breakage.py
5632 index 02c08affa..6320deead 100644
5633 --- a/lib/portage/tests/resolver/test_autounmask_use_breakage.py
5634 +++ b/lib/portage/tests/resolver/test_autounmask_use_breakage.py
5635 @@ -37,7 +37,7 @@ class AutounmaskUseBreakageTestCase(TestCase):
5636 ),
5637 # With --autounmask-backtrack=y:
5638 # emerge: there are no ebuilds built with USE flags to satisfy "app-misc/D[foo]".
5639 - #!!! One of the following packages is required to complete your request:
5640 + #!!!! One of the following packages is required to complete your request:
5641 # - app-misc/D-0::test_repo (Change USE: +foo)
5642 # (dependency required by "app-misc/B-0::test_repo" [ebuild])
5643 # (dependency required by "app-misc/B" [argument])
5644 @@ -48,8 +48,8 @@ class AutounmaskUseBreakageTestCase(TestCase):
5645 # [ebuild N ] app-misc/B-0
5646 # [ebuild N ] app-misc/A-0
5647 #
5648 - #!!! Multiple package instances within a single package slot have been pulled
5649 - #!!! into the dependency graph, resulting in a slot conflict:
5650 + #!!!! Multiple package instances within a single package slot have been pulled
5651 + #!!!! into the dependency graph, resulting in a slot conflict:
5652 #
5653 # app-misc/D:0
5654 #
5655 diff --git a/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py b/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
5656 index b392aaded..25b32d639 100644
5657 --- a/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
5658 +++ b/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
5659 @@ -120,12 +120,12 @@ class SlotConflictUnsatisfiedDeepDepsTestCase(TestCase):
5660 # required by @world (argument)
5661 # =dev-libs/A-2 ~x86
5662 #
5663 - #!!! Problems have been detected with your world file
5664 - #!!! Please run emaint --check world
5665 + #!!!! Problems have been detected with your world file
5666 + #!!!! Please run emaint --check world
5667 #
5668 #
5669 - #!!! Ebuilds for the following packages are either all
5670 - #!!! masked or don't exist:
5671 + #!!!! Ebuilds for the following packages are either all
5672 + #!!!! masked or don't exist:
5673 # dev-libs/broken
5674 #
5675 # emerge: there are no ebuilds to satisfy "dev-libs/initially-unsatisfied".
5676 @@ -133,8 +133,8 @@ class SlotConflictUnsatisfiedDeepDepsTestCase(TestCase):
5677 # (dependency required by "@selected" [set])
5678 # (dependency required by "@world" [argument])
5679 # Without --autounmask-backtrack=y:
5680 - #!!! Multiple package instances within a single package slot have been pulled
5681 - #!!! into the dependency graph, resulting in a slot conflict:
5682 + #!!!! Multiple package instances within a single package slot have been pulled
5683 + #!!!! into the dependency graph, resulting in a slot conflict:
5684 #
5685 # dev-libs/A:0
5686 #
5687 diff --git a/lib/portage/update.py b/lib/portage/update.py
5688 index 0ccca6e26..64296c75c 100644
5689 --- a/lib/portage/update.py
5690 +++ b/lib/portage/update.py
5691 @@ -452,9 +452,9 @@ def update_config_files(
5692 try:
5693 write_atomic(updating_file, "".join(file_contents[x]))
5694 except PortageException as e:
5695 - writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
5696 + writemsg("\n!!!! %s\n" % str(e), noiselevel=-1)
5697 writemsg(
5698 - _("!!! An error occurred while updating a config file:")
5699 + _("!!!! An error occurred while updating a config file:")
5700 + " '%s'\n" % updating_file,
5701 noiselevel=-1,
5702 )
5703 diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
5704 index 5ade7f660..bc5498cd0 100644
5705 --- a/lib/portage/util/__init__.py
5706 +++ b/lib/portage/util/__init__.py
5707 @@ -220,19 +220,19 @@ def stack_dictlist(original_dicts, incremental=0, incrementals=[], ignore_none=0
5708 Returns a single dict. Higher index in lists is preferenced.
5709
5710 Example usage:
5711 - >>> from portage.util import stack_dictlist
5712 - >>> print stack_dictlist( [{'a':'b'},{'x':'y'}])
5713 - >>> {'a':'b','x':'y'}
5714 - >>> print stack_dictlist( [{'a':'b'},{'a':'c'}], incremental = True )
5715 - >>> {'a':['b','c'] }
5716 - >>> a = {'KEYWORDS':['x86','alpha']}
5717 - >>> b = {'KEYWORDS':['-x86']}
5718 - >>> print stack_dictlist( [a,b] )
5719 - >>> { 'KEYWORDS':['x86','alpha','-x86']}
5720 - >>> print stack_dictlist( [a,b], incremental=True)
5721 - >>> { 'KEYWORDS':['alpha'] }
5722 - >>> print stack_dictlist( [a,b], incrementals=['KEYWORDS'])
5723 - >>> { 'KEYWORDS':['alpha'] }
5724 + >>>> from portage.util import stack_dictlist
5725 + >>>> print stack_dictlist( [{'a':'b'},{'x':'y'}])
5726 + >>>> {'a':'b','x':'y'}
5727 + >>>> print stack_dictlist( [{'a':'b'},{'a':'c'}], incremental = True )
5728 + >>>> {'a':['b','c'] }
5729 + >>>> a = {'KEYWORDS':['x86','alpha']}
5730 + >>>> b = {'KEYWORDS':['-x86']}
5731 + >>>> print stack_dictlist( [a,b] )
5732 + >>>> { 'KEYWORDS':['x86','alpha','-x86']}
5733 + >>>> print stack_dictlist( [a,b], incremental=True)
5734 + >>>> { 'KEYWORDS':['alpha'] }
5735 + >>>> print stack_dictlist( [a,b], incrementals=['KEYWORDS'])
5736 + >>>> { 'KEYWORDS':['alpha'] }
5737
5738 @param original_dicts a list of (dictionary objects or None)
5739 @type list
5740 @@ -827,7 +827,7 @@ def getconfig(
5741 if portage._native_string("\r") in content:
5742 writemsg(
5743 (
5744 - "!!! "
5745 + "!!!! "
5746 + _(
5747 "Please use dos2unix to convert line endings "
5748 + "in config file: '%s'"
5749 @@ -1071,7 +1071,7 @@ def pickle_read(filename, default=None, debug=0):
5750 except SystemExit as e:
5751 raise
5752 except Exception as e:
5753 - writemsg(_("!!! Failed to load pickle: ") + str(e) + "\n", 1)
5754 + writemsg(_("!!!! Failed to load pickle: ") + str(e) + "\n", 1)
5755 data = default
5756 return data
5757
5758 diff --git a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
5759 index fd5c97362..a5cd1fb4f 100644
5760 --- a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
5761 +++ b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
5762 @@ -101,7 +101,7 @@ class PreservedLibsRegistry:
5763 raise
5764 except Exception:
5765 writemsg_level(
5766 - _("!!! Error loading '%s': %s\n") % (self._filename, e),
5767 + _("!!!! Error loading '%s': %s\n") % (self._filename, e),
5768 level=logging.ERROR,
5769 noiselevel=-1,
5770 )
5771 @@ -147,7 +147,7 @@ class PreservedLibsRegistry:
5772 except EnvironmentError as e:
5773 if e.errno != PermissionDenied.errno:
5774 writemsg_level(
5775 - "!!! %s %s\n" % (e, self._filename),
5776 + "!!!! %s %s\n" % (e, self._filename),
5777 level=logging.ERROR,
5778 noiselevel=-1,
5779 )
5780 diff --git a/lib/portage/util/_dyn_libs/display_preserved_libs.py b/lib/portage/util/_dyn_libs/display_preserved_libs.py
5781 index e81ca369c..c6da339fe 100644
5782 --- a/lib/portage/util/_dyn_libs/display_preserved_libs.py
5783 +++ b/lib/portage/util/_dyn_libs/display_preserved_libs.py
5784 @@ -20,7 +20,7 @@ def display_preserved_libs(vardb, verbose=False):
5785 linkmap.rebuild()
5786 except portage.exception.CommandNotFound as e:
5787 portage.util.writemsg_level(
5788 - "!!! Command Not Found: %s\n" % (e,), level=logging.ERROR, noiselevel=-1
5789 + "!!!! Command Not Found: %s\n" % (e,), level=logging.ERROR, noiselevel=-1
5790 )
5791 else:
5792 search_for_owners = set()
5793 @@ -54,7 +54,7 @@ def display_preserved_libs(vardb, verbose=False):
5794 all_preserved.update(*plibdata.values())
5795
5796 for cpv in plibdata:
5797 - print(colorize("WARN", ">>>") + " package: %s" % cpv)
5798 + print(colorize("WARN", ">>>>") + " package: %s" % cpv)
5799 samefile_map = {}
5800 for f in plibdata[cpv]:
5801 obj_key = linkmap._obj_key(f)
5802 diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
5803 index bb0ebf84c..98ed62608 100644
5804 --- a/lib/portage/util/env_update.py
5805 +++ b/lib/portage/util/env_update.py
5806 @@ -146,12 +146,12 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
5807 try:
5808 myconfig = getconfig(file_path, expand=False)
5809 except ParseError as e:
5810 - writemsg("!!! '%s'\n" % str(e), noiselevel=-1)
5811 + writemsg("!!!! '%s'\n" % str(e), noiselevel=-1)
5812 del e
5813 continue
5814 if myconfig is None:
5815 # broken symlink or file removed by a concurrent process
5816 - writemsg("!!! File Not Found: '%s'\n" % file_path, noiselevel=-1)
5817 + writemsg("!!!! File Not Found: '%s'\n" % file_path, noiselevel=-1)
5818 continue
5819
5820 config_list.append(myconfig)
5821 @@ -365,12 +365,12 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
5822 # to overwrite the symlinks we just made. -X means no links. After 'clean'
5823 # we can safely create links.
5824 writemsg_level(
5825 - _(">>> Regenerating %setc/ld.so.cache...\n") % (target_root,)
5826 + _(">>>> Regenerating %setc/ld.so.cache...\n") % (target_root,)
5827 )
5828 os.system("cd / ; %s -X -r '%s'" % (ldconfig, target_root))
5829 elif ostype in ("FreeBSD", "DragonFly"):
5830 writemsg_level(
5831 - _(">>> Regenerating %svar/run/ld-elf.so.hints...\n") % target_root
5832 + _(">>>> Regenerating %svar/run/ld-elf.so.hints...\n") % target_root
5833 )
5834 os.system(
5835 (
5836 diff --git a/lib/portage/util/locale.py b/lib/portage/util/locale.py
5837 index 8fb6cb6eb..e4849bcfb 100644
5838 --- a/lib/portage/util/locale.py
5839 +++ b/lib/portage/util/locale.py
5840 @@ -90,7 +90,7 @@ def _check_locale(silent):
5841 ]
5842 )
5843 writemsg_level(
5844 - "".join(["!!! %s\n" % l for l in msg]), level=logging.ERROR, noiselevel=-1
5845 + "".join(["!!!! %s\n" % l for l in msg]), level=logging.ERROR, noiselevel=-1
5846 )
5847 return False
5848
5849 diff --git a/lib/portage/util/movefile.py b/lib/portage/util/movefile.py
5850 index ddafe5571..299d1b989 100644
5851 --- a/lib/portage/util/movefile.py
5852 +++ b/lib/portage/util/movefile.py
5853 @@ -149,9 +149,9 @@ def movefile(
5854 raise
5855 except Exception as e:
5856 writemsg(
5857 - "!!! %s\n" % _("Stating source file failed... movefile()"), noiselevel=-1
5858 + "!!!! %s\n" % _("Stating source file failed... movefile()"), noiselevel=-1
5859 )
5860 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
5861 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
5862 return None
5863
5864 destexists = 1
5865 @@ -223,10 +223,10 @@ def movefile(
5866 raise
5867 except Exception as e:
5868 writemsg(
5869 - "!!! %s\n" % _("failed to properly create symlink:"), noiselevel=-1
5870 + "!!!! %s\n" % _("failed to properly create symlink:"), noiselevel=-1
5871 )
5872 - writemsg("!!! %s -> %s\n" % (dest, target), noiselevel=-1)
5873 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
5874 + writemsg("!!!! %s -> %s\n" % (dest, target), noiselevel=-1)
5875 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
5876 return None
5877
5878 hardlinked = False
5879 @@ -244,11 +244,11 @@ def movefile(
5880 except OSError as e:
5881 if e.errno != errno.ENOENT:
5882 writemsg(
5883 - _("!!! Failed to remove hardlink temp file: %s\n")
5884 + _("!!!! Failed to remove hardlink temp file: %s\n")
5885 % (hardlink_tmp,),
5886 noiselevel=-1,
5887 )
5888 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
5889 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
5890 return None
5891 del e
5892 for hardlink_src in hardlink_candidates:
5893 @@ -261,10 +261,10 @@ def movefile(
5894 os.rename(hardlink_tmp, dest)
5895 except OSError as e:
5896 writemsg(
5897 - _("!!! Failed to rename %s to %s\n") % (hardlink_tmp, dest),
5898 + _("!!!! Failed to rename %s to %s\n") % (hardlink_tmp, dest),
5899 noiselevel=-1,
5900 )
5901 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
5902 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
5903 return None
5904 hardlinked = True
5905 try:
5906 @@ -287,12 +287,12 @@ def movefile(
5907 if e.errno != errno.EXDEV:
5908 # Some random error.
5909 writemsg(
5910 - "!!! %s\n"
5911 + "!!!! %s\n"
5912 % _("Failed to move %(src)s to %(dest)s")
5913 % {"src": src, "dest": dest},
5914 noiselevel=-1,
5915 )
5916 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
5917 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
5918 return None
5919 # Invalid cross-device-link 'bind' mounted or actually Cross-Device
5920 if renamefailed:
5921 @@ -322,19 +322,19 @@ def movefile(
5922 )
5923 msg = textwrap.wrap(msg, 65)
5924 for line in msg:
5925 - writemsg("!!! %s\n" % (line,), noiselevel=-1)
5926 + writemsg("!!!! %s\n" % (line,), noiselevel=-1)
5927 raise
5928 _rename(dest_tmp_bytes, dest_bytes)
5929 _os.unlink(src_bytes)
5930 success = True
5931 except Exception as e:
5932 writemsg(
5933 - "!!! %s\n"
5934 + "!!!! %s\n"
5935 % _("copy %(src)s -> %(dest)s failed.")
5936 % {"src": src, "dest": dest},
5937 noiselevel=-1,
5938 )
5939 - writemsg("!!! %s\n" % (e,), noiselevel=-1)
5940 + writemsg("!!!! %s\n" % (e,), noiselevel=-1)
5941 return None
5942 finally:
5943 if not success:
5944 @@ -346,16 +346,16 @@ def movefile(
5945 # we don't yet handle special, so we need to fall back to /bin/mv
5946 a = spawn([MOVE_BINARY, "-f", src, dest], env=os.environ)
5947 if a != os.EX_OK:
5948 - writemsg(_("!!! Failed to move special file:\n"), noiselevel=-1)
5949 + writemsg(_("!!!! Failed to move special file:\n"), noiselevel=-1)
5950 writemsg(
5951 - _("!!! '%(src)s' to '%(dest)s'\n")
5952 + _("!!!! '%(src)s' to '%(dest)s'\n")
5953 % {
5954 "src": _unicode_decode(src, encoding=encoding),
5955 "dest": _unicode_decode(dest, encoding=encoding),
5956 },
5957 noiselevel=-1,
5958 )
5959 - writemsg("!!! %s\n" % a, noiselevel=-1)
5960 + writemsg("!!!! %s\n" % a, noiselevel=-1)
5961 return None # failure
5962
5963 # In Python <3.3 always use stat_obj[stat.ST_MTIME] for the integral timestamp
5964 @@ -384,9 +384,9 @@ def movefile(
5965 try:
5966 newmtime = os.stat(dest).st_mtime_ns
5967 except OSError as e:
5968 - writemsg(_("!!! Failed to stat in movefile()\n"), noiselevel=-1)
5969 - writemsg("!!! %s\n" % dest, noiselevel=-1)
5970 - writemsg("!!! %s\n" % str(e), noiselevel=-1)
5971 + writemsg(_("!!!! Failed to stat in movefile()\n"), noiselevel=-1)
5972 + writemsg("!!!! %s\n" % dest, noiselevel=-1)
5973 + writemsg("!!!! %s\n" % str(e), noiselevel=-1)
5974 return None
5975
5976 if bsd_chflags:
5977 diff --git a/lib/portage/util/mtimedb.py b/lib/portage/util/mtimedb.py
5978 index 7a7fe6784..77ced65b1 100644
5979 --- a/lib/portage/util/mtimedb.py
5980 +++ b/lib/portage/util/mtimedb.py
5981 @@ -46,7 +46,7 @@ class MtimeDB(dict):
5982 pass
5983 else:
5984 writemsg(
5985 - _("!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
5986 + _("!!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
5987 )
5988 finally:
5989 if f is not None:
5990 @@ -75,7 +75,8 @@ class MtimeDB(dict):
5991 raise
5992 except Exception:
5993 writemsg(
5994 - _("!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
5995 + _("!!!! Error loading '%s': %s\n") % (filename, e),
5996 + noiselevel=-1,
5997 )
5998
5999 if d is None:
6000 diff --git a/lib/portage/util/writeable_check.py b/lib/portage/util/writeable_check.py
6001 index be73745a1..d4d36846b 100644
6002 --- a/lib/portage/util/writeable_check.py
6003 +++ b/lib/portage/util/writeable_check.py
6004 @@ -88,7 +88,7 @@ def linux_ro_checker(dir_list):
6005 # filesystems and return.
6006 except EnvironmentError:
6007 writemsg_level(
6008 - _("!!! /proc/self/mountinfo cannot be read"),
6009 + _("!!!! /proc/self/mountinfo cannot be read"),
6010 level=logging.WARNING,
6011 noiselevel=-1,
6012 )
6013 @@ -96,7 +96,7 @@ def linux_ro_checker(dir_list):
6014
6015 for line in invalids:
6016 writemsg_level(
6017 - _("!!! /proc/self/mountinfo contains unrecognized line: %s\n")
6018 + _("!!!! /proc/self/mountinfo contains unrecognized line: %s\n")
6019 % line.rstrip(),
6020 level=logging.WARNING,
6021 noiselevel=-1,
6022 diff --git a/lib/portage/versions.py b/lib/portage/versions.py
6023 index fe1ff6ce0..68d69bdf4 100644
6024 --- a/lib/portage/versions.py
6025 +++ b/lib/portage/versions.py
6026 @@ -148,7 +148,7 @@ def ververify(myver, silent=1):
6027 if ver_regexp.match(myver):
6028 return True
6029 if not silent:
6030 - print(_("!!! syntax error in version: %s") % myver)
6031 + print(_("!!!! syntax error in version: %s") % myver)
6032 return False
6033
6034
6035 @@ -157,12 +157,12 @@ def vercmp(ver1, ver2, silent=1):
6036 """
6037 Compare two versions
6038 Example usage:
6039 - >>> from portage.versions import vercmp
6040 - >>> vercmp('1.0-r1','1.2-r3')
6041 + >>>> from portage.versions import vercmp
6042 + >>>> vercmp('1.0-r1','1.2-r3')
6043 negative number
6044 - >>> vercmp('1.3','1.2-r3')
6045 + >>>> vercmp('1.3','1.2-r3')
6046 positive number
6047 - >>> vercmp('1.0_p3','1.0_p3')
6048 + >>>> vercmp('1.0_p3','1.0_p3')
6049 0
6050
6051 @param pkg1: version to compare with (see ver_regexp in portage.versions.py)
6052 @@ -186,11 +186,11 @@ def vercmp(ver1, ver2, silent=1):
6053 # checking that the versions are valid
6054 if not match1 or not match1.groups():
6055 if not silent:
6056 - print(_("!!! syntax error in version: %s") % ver1)
6057 + print(_("!!!! syntax error in version: %s") % ver1)
6058 return None
6059 if not match2 or not match2.groups():
6060 if not silent:
6061 - print(_("!!! syntax error in version: %s") % ver2)
6062 + print(_("!!!! syntax error in version: %s") % ver2)
6063 return None
6064
6065 # building lists of the version parts before the suffix
6066 @@ -305,10 +305,10 @@ def pkgcmp(pkg1, pkg2):
6067 Compare 2 package versions created in pkgsplit format.
6068
6069 Example usage:
6070 - >>> from portage.versions import *
6071 - >>> pkgcmp(pkgsplit('test-1.0-r1'),pkgsplit('test-1.2-r3'))
6072 + >>>> from portage.versions import *
6073 + >>>> pkgcmp(pkgsplit('test-1.0-r1'),pkgsplit('test-1.2-r3'))
6074 -1
6075 - >>> pkgcmp(pkgsplit('test-1.3'),pkgsplit('test-1.2-r3'))
6076 + >>>> pkgcmp(pkgsplit('test-1.3'),pkgsplit('test-1.2-r3'))
6077 1
6078
6079 @param pkg1: package to compare with
6080 diff --git a/lib/portage/xml/metadata.py b/lib/portage/xml/metadata.py
6081 index 807847d7e..f65177c8e 100644
6082 --- a/lib/portage/xml/metadata.py
6083 +++ b/lib/portage/xml/metadata.py
6084 @@ -4,27 +4,27 @@
6085 """Provides an easy-to-use python interface to Gentoo's metadata.xml file.
6086
6087 Example usage:
6088 - >>> from portage.xml.metadata import MetaDataXML
6089 - >>> pkg_md = MetaDataXML('/var/db/repos/gentoo/app-misc/gourmet/metadata.xml')
6090 - >>> pkg_md
6091 + >>>> from portage.xml.metadata import MetaDataXML
6092 + >>>> pkg_md = MetaDataXML('/var/db/repos/gentoo/app-misc/gourmet/metadata.xml')
6093 + >>>> pkg_md
6094 <MetaDataXML '/var/db/repos/gentoo/app-misc/gourmet/metadata.xml'>
6095 - >>> pkg_md.herds()
6096 + >>>> pkg_md.herds()
6097 ['no-herd']
6098 - >>> for maint in pkg_md.maintainers():
6099 + >>>> for maint in pkg_md.maintainers():
6100 ... print "{0} ({1})".format(maint.email, maint.name)
6101 ...
6102 nixphoeni@g.o (Joe Sapp)
6103 - >>> for flag in pkg_md.use():
6104 + >>>> for flag in pkg_md.use():
6105 ... print flag.name, "->", flag.description
6106 ...
6107 rtf -> Enable export to RTF
6108 gnome-print -> Enable printing support using gnome-print
6109 - >>> upstream = pkg_md.upstream()
6110 - >>> upstream
6111 + >>>> upstream = pkg_md.upstream()
6112 + >>>> upstream
6113 [<_Upstream {'docs': [], 'remoteid': [], 'maintainer':
6114 [<_Maintainer 'Thomas_Hinkle@××××××××××××.edu'>], 'bugtracker': [],
6115 'changelog': []}>]
6116 - >>> upstream[0].maintainer[0].name
6117 + >>>> upstream[0].maintainer[0].name
6118 'Thomas Mills Hinkle'
6119 """
6120
6121 diff --git a/misc/emerge-delta-webrsync b/misc/emerge-delta-webrsync
6122 index 082e15e52..e10acb9a5 100755
6123 --- a/misc/emerge-delta-webrsync
6124 +++ b/misc/emerge-delta-webrsync
6125 @@ -597,10 +597,10 @@ verify_md5_file() {
6126 #--------------------
6127
6128 if ! type -p patcher &> /dev/null; then
6129 - echo "!!!"
6130 - echo "!!! cannot find patcher, did you emerge dev-util/diffball?"
6131 - echo "!!! lack of patcher == have to do full fetch"
6132 - echo "!!!"
6133 + echo "!!!!"
6134 + echo "!!!! cannot find patcher, did you emerge dev-util/diffball?"
6135 + echo "!!!! lack of patcher == have to do full fetch"
6136 + echo "!!!!"
6137 sleep 10
6138 if do_latest_snapshot; then
6139 rm -fr "${TMPDIR}"
6140 diff --git a/repoman/lib/repoman/__init__.py b/repoman/lib/repoman/__init__.py
6141 index b3690c07d..403bd3af9 100644
6142 --- a/repoman/lib/repoman/__init__.py
6143 +++ b/repoman/lib/repoman/__init__.py
6144 @@ -11,21 +11,21 @@ try:
6145 except ImportError as e:
6146 sys.stderr.write("\n\n")
6147 sys.stderr.write(
6148 - "!!! Failed to complete portage imports. There are internal modules for\n"
6149 + "!!!! Failed to complete portage imports. There are internal modules for\n"
6150 )
6151 sys.stderr.write(
6152 - "!!! portage and failure here indicates that you have a problem with your\n"
6153 + "!!!! portage and failure here indicates that you have a problem with your\n"
6154 )
6155 sys.stderr.write(
6156 - "!!! installation of portage. Please try a rescue portage located in the ebuild\n"
6157 + "!!!! installation of portage. Please try a rescue portage located in the ebuild\n"
6158 )
6159 sys.stderr.write(
6160 - "!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
6161 + "!!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
6162 )
6163 sys.stderr.write(
6164 - "!!! There is a README.RESCUE file that details the steps required to perform\n"
6165 + "!!!! There is a README.RESCUE file that details the steps required to perform\n"
6166 )
6167 - sys.stderr.write("!!! a recovery of portage.\n")
6168 + sys.stderr.write("!!!! a recovery of portage.\n")
6169 sys.stderr.write(" " + str(e) + "\n\n")
6170 raise
6171
6172 diff --git a/repoman/lib/repoman/actions.py b/repoman/lib/repoman/actions.py
6173 index 920f0e97a..fdbbcb0d1 100644
6174 --- a/repoman/lib/repoman/actions.py
6175 +++ b/repoman/lib/repoman/actions.py
6176 @@ -117,7 +117,7 @@ class Actions:
6177 except (IOError, OSError) as e:
6178 if e.errno == errno.ENOENT:
6179 portage.writemsg(
6180 - "!!! File Not Found:"
6181 + "!!!! File Not Found:"
6182 " --commitmsgfile='%s'\n" % self.options.commitmsgfile
6183 )
6184 else:
6185 @@ -379,7 +379,7 @@ the whole commit message to abort.
6186 # so it's safe to ignore.
6187 del myunadded[x]
6188 elif xs[-1] == "files":
6189 - print("!!! files dir is not added! Please correct this.")
6190 + print("!!!! files dir is not added! Please correct this.")
6191 sys.exit(-1)
6192 elif xs[-1] == "Manifest":
6193 # It's a manifest... auto add
6194 @@ -389,13 +389,13 @@ the whole commit message to abort.
6195 if myunadded:
6196 print(
6197 red(
6198 - "!!! The following files are in your local tree"
6199 + "!!!! The following files are in your local tree"
6200 " but are not added to the master"
6201 )
6202 )
6203 print(
6204 red(
6205 - "!!! tree. Please remove them from the local tree"
6206 + "!!!! tree. Please remove them from the local tree"
6207 " or add them to the master tree."
6208 )
6209 )
6210 @@ -410,13 +410,13 @@ the whole commit message to abort.
6211 if self.vcs_settings.changes.has_deleted:
6212 print(
6213 red(
6214 - "!!! The following files are removed manually"
6215 + "!!!! The following files are removed manually"
6216 " from your local tree but are not"
6217 )
6218 )
6219 print(
6220 red(
6221 - "!!! removed from the repository."
6222 + "!!!! removed from the repository."
6223 ' Please remove them, using "%s remove [FILES]".'
6224 % self.vcs_settings.vcs
6225 )
6226 @@ -608,7 +608,7 @@ the whole commit message to abort.
6227 )
6228 if new_changelog is None:
6229 writemsg_level(
6230 - "!!! Updating the ChangeLog failed\n",
6231 + "!!!! Updating the ChangeLog failed\n",
6232 level=logging.ERROR,
6233 noiselevel=-1,
6234 )
6235 @@ -632,7 +632,7 @@ the whole commit message to abort.
6236 broken_changelog_manifests.append(x)
6237
6238 if myautoadd:
6239 - print(">>> Auto-Adding missing Manifest/ChangeLog file(s)...")
6240 + print(">>>> Auto-Adding missing Manifest/ChangeLog file(s)...")
6241 self.vcs_settings.changes.add_items(myautoadd)
6242 myupdates += myautoadd
6243 return myupdates, broken_changelog_manifests
6244 @@ -660,7 +660,7 @@ the whole commit message to abort.
6245 pass
6246 if retval != os.EX_OK:
6247 writemsg_level(
6248 - "!!! Exiting on %s (shell) "
6249 + "!!!! Exiting on %s (shell) "
6250 "error code: %s\n" % (self.vcs_settings.vcs, retval),
6251 level=logging.ERROR,
6252 noiselevel=-1,
6253 @@ -696,7 +696,7 @@ the whole commit message to abort.
6254 pass
6255 if retval != os.EX_OK:
6256 writemsg_level(
6257 - "!!! Exiting on %s (shell) "
6258 + "!!!! Exiting on %s (shell) "
6259 "error code: %s\n" % (self.vcs_settings.vcs, retval),
6260 level=logging.ERROR,
6261 noiselevel=-1,
6262 @@ -720,8 +720,8 @@ the whole commit message to abort.
6263 continue
6264 gpgsign(manifest_path, self.repoman_settings, self.options)
6265 except portage.exception.PortageException as e:
6266 - portage.writemsg("!!! %s\n" % str(e))
6267 - portage.writemsg("!!! Disabled FEATURES='sign'\n")
6268 + portage.writemsg("!!!! %s\n" % str(e))
6269 + portage.writemsg("!!!! Disabled FEATURES='sign'\n")
6270 self.repo_settings.sign_manifests = False
6271
6272 def msg_prefix(self):
6273 diff --git a/repoman/lib/repoman/gpg.py b/repoman/lib/repoman/gpg.py
6274 index 10e884e52..9bed52606 100644
6275 --- a/repoman/lib/repoman/gpg.py
6276 +++ b/repoman/lib/repoman/gpg.py
6277 @@ -57,7 +57,7 @@ def gpgsign(filename, repoman_settings, options):
6278 os.rename(filename + ".asc", filename)
6279 else:
6280 raise portage.exception.PortageException(
6281 - "!!! gpg exited with '" + str(rValue) + "' status"
6282 + "!!!! gpg exited with '" + str(rValue) + "' status"
6283 )
6284
6285
6286 diff --git a/repoman/lib/repoman/modules/commit/manifest.py b/repoman/lib/repoman/modules/commit/manifest.py
6287 index e282ad406..bee80effa 100644
6288 --- a/repoman/lib/repoman/modules/commit/manifest.py
6289 +++ b/repoman/lib/repoman/modules/commit/manifest.py
6290 @@ -48,14 +48,14 @@ class Manifest:
6291 except portage.exception.PermissionDenied as e:
6292 self.generated_manifest = False
6293 writemsg_level(
6294 - "!!! Permission denied: '%s'\n" % (e,),
6295 + "!!!! Permission denied: '%s'\n" % (e,),
6296 level=logging.ERROR,
6297 noiselevel=-1,
6298 )
6299
6300 if not self.generated_manifest:
6301 writemsg_level(
6302 - "!!! Unable to generate manifest for '%s'.\n" % (checkdir,),
6303 + "!!!! Unable to generate manifest for '%s'.\n" % (checkdir,),
6304 level=logging.ERROR,
6305 noiselevel=-1,
6306 )
6307 diff --git a/repoman/lib/repoman/modules/vcs/cvs/status.py b/repoman/lib/repoman/modules/vcs/cvs/status.py
6308 index 0d131c75a..71570bf24 100644
6309 --- a/repoman/lib/repoman/modules/vcs/cvs/status.py
6310 +++ b/repoman/lib/repoman/modules/vcs/cvs/status.py
6311 @@ -94,11 +94,11 @@ class Status:
6312 continue
6313 logging.error(
6314 red(
6315 - "!!! Please fix the following issues reported "
6316 + "!!!! Please fix the following issues reported "
6317 "from cvs: %s" % green("(U,P,M,A,R,D are ok)")
6318 )
6319 )
6320 - logging.error(red("!!! Note: This is a pretend/no-modify pass..."))
6321 + logging.error(red("!!!! Note: This is a pretend/no-modify pass..."))
6322 logging.error(out)
6323 sys.exit(1)
6324 elif line[0] in "UP":
6325 @@ -112,7 +112,7 @@ class Status:
6326 else:
6327 retval = os.system("cvs update " + " ".join(myupdates))
6328 if retval != os.EX_OK:
6329 - logging.fatal("!!! cvs exited with an error. Terminating.")
6330 + logging.fatal("!!!! cvs exited with an error. Terminating.")
6331 sys.exit(retval)
6332 return False
6333
6334 diff --git a/repoman/lib/repoman/modules/vcs/git/changes.py b/repoman/lib/repoman/modules/vcs/git/changes.py
6335 index 3430cf3ec..da3a87c55 100644
6336 --- a/repoman/lib/repoman/modules/vcs/git/changes.py
6337 +++ b/repoman/lib/repoman/modules/vcs/git/changes.py
6338 @@ -120,7 +120,7 @@ class Changes(ChangesBase):
6339 retval = spawn(update_index_cmd, env=os.environ)
6340 if retval != os.EX_OK:
6341 writemsg_level(
6342 - "!!! Exiting on %s (shell) "
6343 + "!!!! Exiting on %s (shell) "
6344 "error code: %s\n" % (self.vcs_settings.vcs, retval),
6345 level=logging.ERROR,
6346 noiselevel=-1,
6347 diff --git a/repoman/lib/repoman/modules/vcs/svn/status.py b/repoman/lib/repoman/modules/vcs/svn/status.py
6348 index 2e6ee927d..82ac29f68 100644
6349 --- a/repoman/lib/repoman/modules/vcs/svn/status.py
6350 +++ b/repoman/lib/repoman/modules/vcs/svn/status.py
6351 @@ -111,11 +111,11 @@ class Status:
6352 continue
6353 logging.error(
6354 red(
6355 - "!!! Please fix the following issues reported "
6356 + "!!!! Please fix the following issues reported "
6357 "from cvs: %s" % green("(U,P,M,A,R,D are ok)")
6358 )
6359 )
6360 - logging.error(red("!!! Note: This is a pretend/no-modify pass..."))
6361 + logging.error(red("!!!! Note: This is a pretend/no-modify pass..."))
6362 logging.error(out)
6363 sys.exit(1)
6364 elif line[8] == "*":
6365 @@ -129,7 +129,7 @@ class Status:
6366 else:
6367 retval = os.system("svn update " + " ".join(myupdates))
6368 if retval != os.EX_OK:
6369 - logging.fatal("!!! svn exited with an error. Terminating.")
6370 + logging.fatal("!!!! svn exited with an error. Terminating.")
6371 sys.exit(retval)
6372 return False
6373
6374 diff --git a/repoman/lib/repoman/scanner.py b/repoman/lib/repoman/scanner.py
6375 index 890950c65..f4c71c9a2 100644
6376 --- a/repoman/lib/repoman/scanner.py
6377 +++ b/repoman/lib/repoman/scanner.py
6378 @@ -456,7 +456,7 @@ class Scanner:
6379 # Do not try to do any more QA checks on this package since missing
6380 # metadata leads to false positives for several checks, and false
6381 # positives confuse users.
6382 - # logging.debug("\t>>> Continuing")
6383 + # logging.debug("\t>>>> Continuing")
6384 break
6385
6386 logging.debug("Finished ebuild plugin loop, continuing...")
6387 @@ -480,5 +480,5 @@ class Scanner:
6388 logging.debug("\tRunning function: %s", func)
6389 _continue = func(**self.set_func_kwargs(mod, dynamic_data))
6390 if _continue:
6391 - # logging.debug("\t>>> Continuing")
6392 + # logging.debug("\t>>>> Continuing")
6393 break
6394 --
6395 2.33.0