public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download: 
* [gentoo-portage-dev] [PATCH 4/4] Use ">>>>" and "!!!!" for output prefixes
  @ 2021-09-28 14:20 99% ` Michał Górny
  0 siblings, 0 replies; 1+ results
From: Michał Górny @ 2021-09-28 14:20 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Michał Górny

Replace ">>>" with ">>>>" and "!!!" with "!!!!" output prefixes in order
to align Portage's messages with the new log output.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 bin/clean_locks                               |   2 +-
 bin/dohtml.py                                 |   2 +-
 bin/doins.py                                  |   2 +-
 bin/ebuild                                    |   8 +-
 bin/ebuild-helpers/dobin                      |   2 +-
 bin/ebuild-helpers/dodoc                      |   2 +-
 bin/ebuild-helpers/doexe                      |   2 +-
 bin/ebuild-helpers/doinfo                     |   2 +-
 bin/ebuild-helpers/dolib                      |   2 +-
 bin/ebuild-helpers/doman                      |   2 +-
 bin/ebuild-helpers/domo                       |   2 +-
 bin/ebuild-helpers/dosbin                     |   2 +-
 bin/ebuild-helpers/dosed                      |   4 +-
 bin/ebuild-helpers/keepdir                    |   2 +-
 bin/ebuild-helpers/newins                     |   4 +-
 bin/env-update                                |   2 +-
 bin/fixpackages                               |   4 +-
 bin/glsa-check                                |  14 +-
 bin/install.py                                |   2 +-
 bin/misc-functions.sh                         |  22 +--
 bin/phase-functions.sh                        |  64 ++++-----
 bin/phase-helpers.sh                          |  18 +--
 bin/portageq                                  |   6 +-
 cnf/repo.postsync.d/example                   |   4 +-
 lib/_emerge/Binpkg.py                         |  10 +-
 lib/_emerge/BinpkgExtractorAsync.py           |   4 +-
 lib/_emerge/BinpkgVerifier.py                 |  12 +-
 lib/_emerge/BlockerCache.py                   |   2 +-
 lib/_emerge/BlockerDB.py                      |   2 +-
 lib/_emerge/EbuildBuild.py                    |   2 +-
 lib/_emerge/EbuildIpcDaemon.py                |   2 +-
 lib/_emerge/EbuildPhase.py                    |   2 +-
 lib/_emerge/JobStatusDisplay.py               |   2 +-
 lib/_emerge/MergeListItem.py                  |   2 +-
 lib/_emerge/PackageUninstall.py               |   6 +-
 lib/_emerge/Scheduler.py                      |  20 +--
 lib/_emerge/SpawnProcess.py                   |   2 +-
 lib/_emerge/SubProcess.py                     |   2 +-
 lib/_emerge/actions.py                        | 126 ++++++++++--------
 lib/_emerge/countdown.py                      |   4 +-
 lib/_emerge/depgraph.py                       | 121 +++++++++--------
 lib/_emerge/main.py                           |   6 +-
 lib/_emerge/post_emerge.py                    |   4 +-
 lib/_emerge/resolver/output_helpers.py        |   4 +-
 lib/_emerge/resolver/slot_collision.py        |  16 +--
 lib/_emerge/show_invalid_depstring_notice.py  |   2 +-
 lib/_emerge/unmerge.py                        |  44 +++---
 lib/portage/__init__.py                       |  24 ++--
 lib/portage/_selinux.py                       |   4 +-
 lib/portage/_sets/shell.py                    |   2 +-
 lib/portage/binrepo/config.py                 |   4 +-
 lib/portage/data.py                           |   2 +-
 lib/portage/dbapi/__init__.py                 |   2 +-
 lib/portage/dbapi/bintree.py                  |  45 ++++---
 lib/portage/dbapi/porttree.py                 |  12 +-
 lib/portage/dbapi/vartree.py                  |  94 ++++++-------
 lib/portage/dep/__init__.py                   |  48 +++----
 lib/portage/elog/__init__.py                  |   2 +-
 lib/portage/elog/messages.py                  |   5 +-
 lib/portage/elog/mod_custom.py                |   4 +-
 lib/portage/elog/mod_mail_summary.py          |   2 +-
 lib/portage/elog/mod_save_summary.py          |   2 +-
 lib/portage/emaint/modules/binhost/binhost.py |   3 +-
 lib/portage/env/loaders.py                    |  14 +-
 lib/portage/getbinpkg.py                      |  32 ++---
 lib/portage/locks.py                          |   2 +-
 lib/portage/mail.py                           |  12 +-
 lib/portage/manifest.py                       |   2 +-
 lib/portage/metadata.py                       |   6 +-
 lib/portage/news.py                           |   6 +-
 .../ebuild/_config/LocationsManager.py        |  10 +-
 .../_parallel_manifest/ManifestProcess.py     |   6 +-
 .../_parallel_manifest/ManifestScheduler.py   |   2 +-
 .../ebuild/_parallel_manifest/ManifestTask.py |   6 +-
 lib/portage/package/ebuild/config.py          |  61 ++++-----
 .../ebuild/deprecated_profile_check.py        |  12 +-
 lib/portage/package/ebuild/digestcheck.py     |  24 ++--
 lib/portage/package/ebuild/digestgen.py       |  20 +--
 lib/portage/package/ebuild/doebuild.py        |  36 ++---
 lib/portage/package/ebuild/fetch.py           | 126 +++++++++---------
 .../package/ebuild/prepare_build_dirs.py      |  25 ++--
 lib/portage/repository/config.py              |  31 ++---
 lib/portage/sync/config_checks.py             |  12 +-
 lib/portage/sync/controller.py                |   6 +-
 lib/portage/sync/modules/cvs/__init__.py      |   2 +-
 lib/portage/sync/modules/cvs/cvs.py           |   4 +-
 lib/portage/sync/modules/git/__init__.py      |   4 +-
 lib/portage/sync/modules/git/git.py           |  14 +-
 .../sync/modules/mercurial/mercurial.py       |   4 +-
 lib/portage/sync/modules/rsync/rsync.py       |  60 ++++-----
 lib/portage/sync/modules/svn/svn.py           |   6 +-
 lib/portage/sync/modules/webrsync/webrsync.py |  10 +-
 lib/portage/sync/old_tree_timestamp.py        |   2 +-
 lib/portage/sync/syncbase.py                  |   6 +-
 lib/portage/tests/resolver/test_autounmask.py |   6 +-
 .../resolver/test_autounmask_use_breakage.py  |   6 +-
 ...est_slot_conflict_unsatisfied_deep_deps.py |  12 +-
 lib/portage/update.py                         |   4 +-
 lib/portage/util/__init__.py                  |  30 ++---
 .../util/_dyn_libs/PreservedLibsRegistry.py   |   4 +-
 .../util/_dyn_libs/display_preserved_libs.py  |   4 +-
 lib/portage/util/env_update.py                |   8 +-
 lib/portage/util/locale.py                    |   2 +-
 lib/portage/util/movefile.py                  |  40 +++---
 lib/portage/util/mtimedb.py                   |   5 +-
 lib/portage/util/writeable_check.py           |   4 +-
 lib/portage/versions.py                       |  20 +--
 lib/portage/xml/metadata.py                   |  18 +--
 misc/emerge-delta-webrsync                    |   8 +-
 repoman/lib/repoman/__init__.py               |  12 +-
 repoman/lib/repoman/actions.py                |  24 ++--
 repoman/lib/repoman/gpg.py                    |   2 +-
 .../lib/repoman/modules/commit/manifest.py    |   4 +-
 repoman/lib/repoman/modules/vcs/cvs/status.py |   6 +-
 .../lib/repoman/modules/vcs/git/changes.py    |   2 +-
 repoman/lib/repoman/modules/vcs/svn/status.py |   6 +-
 repoman/lib/repoman/scanner.py                |   4 +-
 117 files changed, 834 insertions(+), 788 deletions(-)

diff --git a/bin/clean_locks b/bin/clean_locks
index e5765fd7e..14f3c857c 100755
--- a/bin/clean_locks
+++ b/bin/clean_locks
@@ -36,7 +36,7 @@ for x in sys.argv[1:]:
 
 	except OSError as e:
 		if e.errno in (errno.ENOENT, errno.ENOTDIR):
-			print("!!! %s is not a directory or does not exist" % x)
+			print("!!!! %s is not a directory or does not exist" % x)
 		else:
 			raise
 		sys.exit(e.errno)
diff --git a/bin/dohtml.py b/bin/dohtml.py
index c7235ff4e..344ab7579 100755
--- a/bin/dohtml.py
+++ b/bin/dohtml.py
@@ -96,7 +96,7 @@ def install(basename, dirname, options, prefix=""):
     ).rstrip(os.sep)
 
     if not os.path.exists(fullpath):
-        sys.stderr.write("!!! dohtml: %s does not exist\n" % fullpath)
+        sys.stderr.write("!!!! dohtml: %s does not exist\n" % fullpath)
         return False
     elif os.path.isfile(fullpath):
         ext = os.path.splitext(basename)[1][1:]
diff --git a/bin/doins.py b/bin/doins.py
index 97b0e2e2f..0f4c0fd3c 100644
--- a/bin/doins.py
+++ b/bin/doins.py
@@ -34,7 +34,7 @@ def _warn(helper, msg):
             helper: helper executable name.
             msg: Message to be output.
     """
-    print("!!! %s: %s\n" % (helper, msg), file=sys.stderr)
+    print("!!!! %s: %s\n" % (helper, msg), file=sys.stderr)
 
 
 def _parse_group(group):
diff --git a/bin/ebuild b/bin/ebuild
index 0a2b13a13..2cf004671 100755
--- a/bin/ebuild
+++ b/bin/ebuild
@@ -328,7 +328,7 @@ def stale_env_warning():
 				(tmpsettings["PF"], )
 			msg = textwrap.wrap(msg, 70)
 			for x in msg:
-				portage.writemsg(">>> %s\n" % x)
+				portage.writemsg(">>>> %s\n" % x)
 
 			if ebuild_changed:
 				open(os.path.join(tmpsettings['PORTAGE_BUILDDIR'],
@@ -359,13 +359,13 @@ for arg in pargs:
 		msg = textwrap.wrap(str(e), 70)
 		del e
 		for x in msg:
-			portage.writemsg("!!! %s\n" % x, noiselevel=-1)
+			portage.writemsg("!!!! %s\n" % x, noiselevel=-1)
 		a = 1
 	except PortagePackageException as e:
-		portage.writemsg("!!! %s\n" % (e,), noiselevel=-1)
+		portage.writemsg("!!!! %s\n" % (e,), noiselevel=-1)
 		a = 1
 	except PermissionDenied as e:
-		portage.writemsg("!!! Permission Denied: %s\n" % (e,), noiselevel=-1)
+		portage.writemsg("!!!! Permission Denied: %s\n" % (e,), noiselevel=-1)
 		a = 1
 	if a == None:
 		print("Could not run the required binary?")
diff --git a/bin/ebuild-helpers/dobin b/bin/ebuild-helpers/dobin
index 975067fb1..aaa3f2588 100755
--- a/bin/ebuild-helpers/dobin
+++ b/bin/ebuild-helpers/dobin
@@ -31,7 +31,7 @@ for x in "$@" ; do
 	if [[ -e ${x} ]] ; then
 		install -m0755 -o ${PORTAGE_INST_UID:-0} -g ${PORTAGE_INST_GID:-0} "${x}" "${ED%/}/${_E_DESTTREE_#/}/bin"
 	else
-		echo "!!! ${0##*/}: $x does not exist" 1>&2
+		echo "!!!! ${0##*/}: $x does not exist" 1>&2
 		false
 	fi
 	((ret|=$?))
diff --git a/bin/ebuild-helpers/dodoc b/bin/ebuild-helpers/dodoc
index e83091045..30bc3ab0e 100755
--- a/bin/ebuild-helpers/dodoc
+++ b/bin/ebuild-helpers/dodoc
@@ -29,7 +29,7 @@ for x in "$@" ; do
 	elif [ -s "${x}" ] ; then
 		install -m0644 "${x}" "${dir}" || { ((ret|=1)); continue; }
 	elif [ ! -e "${x}" ] ; then
-		echo "!!! ${0##*/}: $x does not exist" 1>&2
+		echo "!!!! ${0##*/}: $x does not exist" 1>&2
 		((ret|=1))
 	fi
 done
diff --git a/bin/ebuild-helpers/doexe b/bin/ebuild-helpers/doexe
index 152c13bf6..27b4acc19 100755
--- a/bin/ebuild-helpers/doexe
+++ b/bin/ebuild-helpers/doexe
@@ -34,7 +34,7 @@ for x in "$@" ; do
 	if [ -e "$mysrc" ] ; then
 		install ${EXEOPTIONS} "$mysrc" "${ED%/}/${_E_EXEDESTTREE_#/}"
 	else
-		echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
+		echo "!!!! ${0##*/}: $mysrc does not exist" 1>&2
 		false
 	fi
 	((ret|=$?))
diff --git a/bin/ebuild-helpers/doinfo b/bin/ebuild-helpers/doinfo
index 30a38e055..515cdc3bb 100755
--- a/bin/ebuild-helpers/doinfo
+++ b/bin/ebuild-helpers/doinfo
@@ -21,7 +21,7 @@ install -m0644 "$@" "${ED%/}/usr/share/info"
 rval=$?
 if [ $rval -ne 0 ] ; then
 	for x in "$@" ; do
-		[ -e "$x" ] || echo "!!! ${0##*/}: $x does not exist" 1>&2
+		[ -e "$x" ] || echo "!!!! ${0##*/}: $x does not exist" 1>&2
 	done
 	__helpers_die "${0##*/} failed"
 fi
diff --git a/bin/ebuild-helpers/dolib b/bin/ebuild-helpers/dolib
index bd8eebca7..8975611c6 100755
--- a/bin/ebuild-helpers/dolib
+++ b/bin/ebuild-helpers/dolib
@@ -50,7 +50,7 @@ for x in "$@" ; do
 			ln -s "$(readlink "${x}")" "${libdir}/${x##*/}"
 		fi
 	else
-		echo "!!! ${0##*/}: ${x} does not exist" 1>&2
+		echo "!!!! ${0##*/}: ${x} does not exist" 1>&2
 		false
 	fi
 	((ret|=$?))
diff --git a/bin/ebuild-helpers/doman b/bin/ebuild-helpers/doman
index 9cfc89df0..1b56e08dd 100755
--- a/bin/ebuild-helpers/doman
+++ b/bin/ebuild-helpers/doman
@@ -56,7 +56,7 @@ for x in "$@" ; do
 			install -m0644 "${x}" "${ED%/}/usr/share/man/${mandir}/${name}"
 			((ret|=$?))
 		elif [[ ! -e ${x} ]] ; then
-			echo "!!! ${0##*/}: $x does not exist" 1>&2
+			echo "!!!! ${0##*/}: $x does not exist" 1>&2
 			((ret|=1))
 		fi
 	else
diff --git a/bin/ebuild-helpers/domo b/bin/ebuild-helpers/domo
index 2e95eb751..416e15ae6 100755
--- a/bin/ebuild-helpers/domo
+++ b/bin/ebuild-helpers/domo
@@ -42,7 +42,7 @@ for x in "$@" ; do
 		fi
 		install -m0644 "${x}" "${mydir}/${MOPREFIX}.mo"
 	else
-		echo "!!! ${0##*/}: $x does not exist" 1>&2
+		echo "!!!! ${0##*/}: $x does not exist" 1>&2
 		false
 	fi
 	((ret|=$?))
diff --git a/bin/ebuild-helpers/dosbin b/bin/ebuild-helpers/dosbin
index ac0ab37ca..db99ab17a 100755
--- a/bin/ebuild-helpers/dosbin
+++ b/bin/ebuild-helpers/dosbin
@@ -31,7 +31,7 @@ for x in "$@" ; do
 	if [[ -e ${x} ]] ; then
 		install -m0755 -o ${PORTAGE_INST_UID:-0} -g ${PORTAGE_INST_GID:-0} "${x}" "${ED%/}/${_E_DESTTREE_#/}/sbin"
 	else
-		echo "!!! ${0##*/}: ${x} does not exist" 1>&2
+		echo "!!!! ${0##*/}: ${x} does not exist" 1>&2
 		false
 	fi
 	((ret|=$?))
diff --git a/bin/ebuild-helpers/dosed b/bin/ebuild-helpers/dosed
index 37c8a29d3..9c75cbf64 100755
--- a/bin/ebuild-helpers/dosed
+++ b/bin/ebuild-helpers/dosed
@@ -10,7 +10,7 @@ if ! ___eapi_has_dosed; then
 fi
 
 if [[ $# -lt 1 ]] ; then
-	echo "!!! ${0##*/}: at least one argument needed" >&2
+	echo "!!!! ${0##*/}: at least one argument needed" >&2
 	exit 1
 fi
 
@@ -39,7 +39,7 @@ for x in "$@" ; do
 done
 
 if [ $file_found = 0 ] ; then
-	echo "!!! ${0##*/}: $y does not exist" 1>&2
+	echo "!!!! ${0##*/}: $y does not exist" 1>&2
 	((ret|=1))
 fi
 
diff --git a/bin/ebuild-helpers/keepdir b/bin/ebuild-helpers/keepdir
index a3c0c151c..0ea23ad1b 100755
--- a/bin/ebuild-helpers/keepdir
+++ b/bin/ebuild-helpers/keepdir
@@ -13,7 +13,7 @@ ret=$?
 
 for x in "$@"; do
 	>> "${ED%/}/${x#/}/.keep_${CATEGORY}_${PN}-${SLOT%/*}" || \
-		{ echo "!!! ${0##*/}: cannot write .keep in ${ED%/}/${x#/}" 1>&2; ret=1; }
+		{ echo "!!!! ${0##*/}: cannot write .keep in ${ED%/}/${x#/}" 1>&2; ret=1; }
 done
 
 [[ ${ret} -ne 0 ]] && __helpers_die "${0##*/} failed"
diff --git a/bin/ebuild-helpers/newins b/bin/ebuild-helpers/newins
index 30e54b7e5..dcb779913 100755
--- a/bin/ebuild-helpers/newins
+++ b/bin/ebuild-helpers/newins
@@ -24,14 +24,14 @@ trap 'rm -rf "${TMP}"' EXIT
 
 if [[ ${stdin} ]] ; then
 	if [[ -t 0 ]] ; then
-		__helpers_die "!!! ${helper}: Input is from a terminal"
+		__helpers_die "!!!! ${helper}: Input is from a terminal"
 		exit 1
 	fi
 	cat > "${TMP}/$2"
 	ret=$?
 else
 	if [[ ! -e $1 ]] ; then
-		__helpers_die "!!! ${helper}: $1 does not exist"
+		__helpers_die "!!!! ${helper}: $1 does not exist"
 		exit 1
 	fi
 
diff --git a/bin/env-update b/bin/env-update
index 6571b0011..4fe916a6a 100755
--- a/bin/env-update
+++ b/bin/env-update
@@ -20,7 +20,7 @@ if "--no-ldconfig" in sys.argv:
 	sys.argv.pop(sys.argv.index("--no-ldconfig"))
 
 if len(sys.argv) > 1:
-	print("!!! Invalid command line options!\n")
+	print("!!!! Invalid command line options!\n")
 	usage(1)
 
 from os import path as osp
diff --git a/bin/fixpackages b/bin/fixpackages
index e56d26ec1..b4d6f6a1d 100755
--- a/bin/fixpackages
+++ b/bin/fixpackages
@@ -38,9 +38,9 @@ if mysettings['ROOT'] != "/":
 try:
 	os.nice(int(mysettings.get("PORTAGE_NICENESS", "0")))
 except (OSError, ValueError) as e:
-	portage.writemsg("!!! Failed to change nice value to '%s'\n" % \
+	portage.writemsg("!!!! Failed to change nice value to '%s'\n" % \
 		mysettings["PORTAGE_NICENESS"])
-	portage.writemsg("!!! %s\n" % str(e))
+	portage.writemsg("!!!! %s\n" % str(e))
 	del e
 
 _global_updates(mytrees, mtimedb["updates"], if_mtime_changed=False)
diff --git a/bin/glsa-check b/bin/glsa-check
index c8610f7df..db6d95894 100755
--- a/bin/glsa-check
+++ b/bin/glsa-check
@@ -233,16 +233,16 @@ if mode in ["dump", "fix", "inject", "pretend"]:
 				sys.stdout.write("Fixing GLSA "+myid+"\n")
 			if not myglsa.isVulnerable():
 				if not quiet:
-					sys.stdout.write(">>> no vulnerable packages installed\n")
+					sys.stdout.write(">>>> no vulnerable packages installed\n")
 			else:
 				if quiet:
 					sys.stdout.write("Fixing GLSA "+myid+"\n")
 				mergelist = myglsa.getMergeList(least_change=least_change)
 				if mergelist == []:
-					sys.stdout.write(">>> cannot fix GLSA, no unaffected packages available\n")
+					sys.stdout.write(">>>> cannot fix GLSA, no unaffected packages available\n")
 					sys.exit(2)
 				for pkg in mergelist:
-					sys.stdout.write(">>> merging "+pkg+"\n")
+					sys.stdout.write(">>>> merging "+pkg+"\n")
 					# using emerge for the actual merging as it contains the dependency
 					# code and we want to be consistent in behaviour. Also this functionality
 					# will be integrated in emerge later, so it shouldn't hurt much.
@@ -262,7 +262,7 @@ if mode in ["dump", "fix", "inject", "pretend"]:
 				sys.stdout.write("Checking GLSA "+myid+"\n")
 			if not myglsa.isVulnerable():
 				if not quiet:
-					sys.stdout.write(">>> no vulnerable packages installed\n")
+					sys.stdout.write(">>>> no vulnerable packages installed\n")
 			else:
 				if quiet:
 					sys.stdout.write("Checking GLSA "+myid+"\n")
@@ -272,19 +272,19 @@ if mode in ["dump", "fix", "inject", "pretend"]:
 
 				# first, extract the atoms that cannot be upgraded (where key == "")
 				no_upgrades = []
-				sys.stdout.write(">>> The following updates will be performed for this GLSA:\n")
+				sys.stdout.write(">>>> The following updates will be performed for this GLSA:\n")
 				if "" in mergedict:
 					no_upgrades = mergedict[""]
 					del mergedict[""]
 
 				# see if anything is left that can be upgraded
 				if mergedict:
-					sys.stdout.write(">>> Updates that will be performed:\n")
+					sys.stdout.write(">>>> Updates that will be performed:\n")
 					for (upd, vuln) in mergedict.items():
 						sys.stdout.write("     " + green(upd) + " (vulnerable: " + red(", ".join(vuln)) + ")\n")
 
 				if no_upgrades:
-					sys.stdout.write(">>> No upgrade path exists for these packages:\n")
+					sys.stdout.write(">>>> No upgrade path exists for these packages:\n")
 					sys.stdout.write("     " + red(", ".join(no_upgrades)) + "\n")
 			sys.stdout.write("\n")
 		elif mode == "inject":
diff --git a/bin/install.py b/bin/install.py
index d6faeb6a4..e53200c42 100755
--- a/bin/install.py
+++ b/bin/install.py
@@ -173,7 +173,7 @@ def main(args):
         returncode = copy_xattrs(opts, files)
         if returncode != os.EX_OK:
             portage.util.writemsg(
-                "!!! install: copy_xattrs failed with the "
+                "!!!! install: copy_xattrs failed with the "
                 "following arguments: %s\n"
                 % " ".join(portage._shell_quote(x) for x in args),
                 noiselevel=-1,
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index e4defa550..8a4c913b5 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -255,8 +255,8 @@ install_qa_check() {
 
 __dyn_instprep() {
 	if [[ -e ${PORTAGE_BUILDDIR}/.instprepped ]] ; then
-		__vecho ">>> It appears that '$PF' is already instprepped; skipping."
-		__vecho ">>> Remove '${PORTAGE_BUILDDIR}/.instprepped' to force instprep."
+		__vecho ">>>> It appears that '$PF' is already instprepped; skipping."
+		__vecho ">>>> Remove '${PORTAGE_BUILDDIR}/.instprepped' to force instprep."
 		return 0
 	fi
 
@@ -398,11 +398,11 @@ preinst_sfperms() {
 		find "${ED}" -type f -perm -4000 -print0 | \
 		while read -r -d $'\0' i ; do
 			if [ -n "$(find "$i" -perm -2000)" ] ; then
-				ebegin ">>> SetUID and SetGID: [chmod o-r] ${i#${ED%/}}"
+				ebegin ">>>> SetUID and SetGID: [chmod o-r] ${i#${ED%/}}"
 				chmod o-r "$i"
 				eend $?
 			else
-				ebegin ">>> SetUID: [chmod go-r] ${i#${ED%/}}"
+				ebegin ">>>> SetUID: [chmod go-r] ${i#${ED%/}}"
 				chmod go-r "$i"
 				eend $?
 			fi
@@ -414,7 +414,7 @@ preinst_sfperms() {
 				# by the SetUID check above.
 				true
 			else
-				ebegin ">>> SetGID: [chmod o-r] ${i#${ED%/}}"
+				ebegin ">>>> SetGID: [chmod o-r] ${i#${ED%/}}"
 				chmod o-r "$i"
 				eend $?
 			fi
@@ -440,19 +440,19 @@ preinst_suid_scan() {
 		# to files outside of the sandbox, but this
 		# can easly be bypassed using the addwrite() function
 		addwrite "${sfconf}"
-		__vecho ">>> Performing suid scan in ${ED}"
+		__vecho ">>>> Performing suid scan in ${ED}"
 		for i in $(find "${ED}" -type f \( -perm -4000 -o -perm -2000 \) ); do
 			if [ -s "${sfconf}" ]; then
 				install_path=${i#${ED%/}}
 				if grep -q "^${install_path}\$" "${sfconf}" ; then
 					__vecho "- ${install_path} is an approved suid file"
 				else
-					__vecho ">>> Removing sbit on non registered ${install_path}"
+					__vecho ">>>> Removing sbit on non registered ${install_path}"
 					LC_ALL=C sleep 1.5
 					ls_ret=$(ls -ldh "${i}")
 					chmod ugo-s "${i}"
 					grep "^#${install_path}$" "${sfconf}" > /dev/null || {
-						__vecho ">>> Appending commented out entry to ${sfconf} for ${PF}"
+						__vecho ">>>> Appending commented out entry to ${sfconf} for ${PF}"
 						echo "## ${ls_ret%${ED%/}*}${install_path}" >> "${sfconf}"
 						echo "#${install_path}" >> "${sfconf}"
 						# no delwrite() eh?
@@ -476,7 +476,7 @@ preinst_selinux_labels() {
 		# only attempt to label if setfiles is executable
 		# and 'context' is available on selinuxfs.
 		if [ -f /sys/fs/selinux/context -a -x /usr/sbin/setfiles -a -x /usr/sbin/selinuxconfig ]; then
-			__vecho ">>> Setting SELinux security labels"
+			__vecho ">>>> Setting SELinux security labels"
 			(
 				eval "$(/usr/sbin/selinuxconfig)" || \
 					die "Failed to determine SELinux policy paths.";
@@ -488,7 +488,7 @@ preinst_selinux_labels() {
 		else
 			# nonfatal, since merging can happen outside a SE kernel
 			# like during a recovery situation
-			__vecho "!!! Unable to set SELinux security labels"
+			__vecho "!!!! Unable to set SELinux security labels"
 		fi
 	fi
 }
@@ -534,7 +534,7 @@ __dyn_package() {
 	fi
 	[ -n "${md5_hash}" ] && \
 		echo ${md5_hash} > "${PORTAGE_BUILDDIR}"/build-info/BINPKGMD5
-	__vecho ">>> Done."
+	__vecho ">>>> Done."
 
 	cd "${PORTAGE_BUILDDIR}"
 	>> "$PORTAGE_BUILDDIR/.packaged" || \
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index 9a4c97b16..967af68b5 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -219,8 +219,8 @@ __ebuild_phase_with_hooks() {
 
 __dyn_pretend() {
 	if [[ -e $PORTAGE_BUILDDIR/.pretended ]] ; then
-		__vecho ">>> It appears that '$PF' is already pretended; skipping."
-		__vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
+		__vecho ">>>> It appears that '$PF' is already pretended; skipping."
+		__vecho ">>>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
 		return 0
 	fi
 	__ebuild_phase pre_pkg_pretend
@@ -232,8 +232,8 @@ __dyn_pretend() {
 
 __dyn_setup() {
 	if [[ -e $PORTAGE_BUILDDIR/.setuped ]] ; then
-		__vecho ">>> It appears that '$PF' is already setup; skipping."
-		__vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
+		__vecho ">>>> It appears that '$PF' is already setup; skipping."
+		__vecho ">>>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
 		return 0
 	fi
 	__ebuild_phase pre_pkg_setup
@@ -245,7 +245,7 @@ __dyn_setup() {
 
 __dyn_unpack() {
 	if [[ -f ${PORTAGE_BUILDDIR}/.unpacked ]] ; then
-		__vecho ">>> WORKDIR is up-to-date, keeping..."
+		__vecho ">>>> WORKDIR is up-to-date, keeping..."
 		return 0
 	fi
 	if [ ! -d "${WORKDIR}" ]; then
@@ -253,11 +253,11 @@ __dyn_unpack() {
 	fi
 	cd "${WORKDIR}" || die "Directory change failed: \`cd '${WORKDIR}'\`"
 	__ebuild_phase pre_src_unpack
-	__vecho ">>> Unpacking source..."
+	__vecho ">>>> Unpacking source..."
 	__ebuild_phase src_unpack
 	>> "$PORTAGE_BUILDDIR/.unpacked" || \
 		die "Failed to create $PORTAGE_BUILDDIR/.unpacked"
-	__vecho ">>> Source unpacked in ${WORKDIR}"
+	__vecho ">>>> Source unpacked in ${WORKDIR}"
 	__ebuild_phase post_src_unpack
 }
 
@@ -370,8 +370,8 @@ __has_phase_defined_up_to() {
 __dyn_prepare() {
 
 	if [[ -e $PORTAGE_BUILDDIR/.prepared ]] ; then
-		__vecho ">>> It appears that '$PF' is already prepared; skipping."
-		__vecho ">>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
+		__vecho ">>>> It appears that '$PF' is already prepared; skipping."
+		__vecho ">>>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
 		return 0
 	fi
 
@@ -388,7 +388,7 @@ __dyn_prepare() {
 	trap __abort_prepare SIGINT SIGQUIT
 
 	__ebuild_phase pre_src_prepare
-	__vecho ">>> Preparing source in $PWD ..."
+	__vecho ">>>> Preparing source in $PWD ..."
 	__ebuild_phase src_prepare
 
 	# keep path in eapply_user in sync!
@@ -398,7 +398,7 @@ __dyn_prepare() {
 
 	>> "$PORTAGE_BUILDDIR/.prepared" || \
 		die "Failed to create $PORTAGE_BUILDDIR/.prepared"
-	__vecho ">>> Source prepared."
+	__vecho ">>>> Source prepared."
 	__ebuild_phase post_src_prepare
 
 	trap - SIGINT SIGQUIT
@@ -407,8 +407,8 @@ __dyn_prepare() {
 __dyn_configure() {
 
 	if [[ -e $PORTAGE_BUILDDIR/.configured ]] ; then
-		__vecho ">>> It appears that '$PF' is already configured; skipping."
-		__vecho ">>> Remove '$PORTAGE_BUILDDIR/.configured' to force configuration."
+		__vecho ">>>> It appears that '$PF' is already configured; skipping."
+		__vecho ">>>> Remove '$PORTAGE_BUILDDIR/.configured' to force configuration."
 		return 0
 	fi
 
@@ -426,11 +426,11 @@ __dyn_configure() {
 
 	__ebuild_phase pre_src_configure
 
-	__vecho ">>> Configuring source in $PWD ..."
+	__vecho ">>>> Configuring source in $PWD ..."
 	__ebuild_phase src_configure
 	>> "$PORTAGE_BUILDDIR/.configured" || \
 		die "Failed to create $PORTAGE_BUILDDIR/.configured"
-	__vecho ">>> Source configured."
+	__vecho ">>>> Source configured."
 
 	__ebuild_phase post_src_configure
 
@@ -440,8 +440,8 @@ __dyn_configure() {
 __dyn_compile() {
 
 	if [[ -e $PORTAGE_BUILDDIR/.compiled ]] ; then
-		__vecho ">>> It appears that '${PF}' is already compiled; skipping."
-		__vecho ">>> Remove '$PORTAGE_BUILDDIR/.compiled' to force compilation."
+		__vecho ">>>> It appears that '${PF}' is already compiled; skipping."
+		__vecho ">>>> Remove '$PORTAGE_BUILDDIR/.compiled' to force compilation."
 		return 0
 	fi
 
@@ -459,11 +459,11 @@ __dyn_compile() {
 
 	__ebuild_phase pre_src_compile
 
-	__vecho ">>> Compiling source in $PWD ..."
+	__vecho ">>>> Compiling source in $PWD ..."
 	__ebuild_phase src_compile
 	>> "$PORTAGE_BUILDDIR/.compiled" || \
 		die "Failed to create $PORTAGE_BUILDDIR/.compiled"
-	__vecho ">>> Source compiled."
+	__vecho ">>>> Source compiled."
 
 	__ebuild_phase post_src_compile
 
@@ -473,8 +473,8 @@ __dyn_compile() {
 __dyn_test() {
 
 	if [[ -e $PORTAGE_BUILDDIR/.tested ]] ; then
-		__vecho ">>> It appears that ${PN} has already been tested; skipping."
-		__vecho ">>> Remove '${PORTAGE_BUILDDIR}/.tested' to force test."
+		__vecho ">>>> It appears that ${PN} has already been tested; skipping."
+		__vecho ">>>> Remove '${PORTAGE_BUILDDIR}/.tested' to force test."
 		return
 	fi
 
@@ -494,20 +494,20 @@ __dyn_test() {
 			! { has test_network ${PORTAGE_PROPERTIES} && has network ${ALLOW_TEST}; }
 	then
 		einfo "Skipping make test/check due to ebuild restriction."
-		__vecho ">>> Test phase [disabled because of RESTRICT=test]: ${CATEGORY}/${PF}"
+		__vecho ">>>> Test phase [disabled because of RESTRICT=test]: ${CATEGORY}/${PF}"
 
 	# If ${EBUILD_FORCE_TEST} == 1 and FEATURES came from ${T}/environment
 	# then it might not have FEATURES=test like it's supposed to here.
 	elif [[ ${EBUILD_FORCE_TEST} != 1 ]] && ! has test ${FEATURES} ; then
-		__vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
+		__vecho ">>>> Test phase [not enabled]: ${CATEGORY}/${PF}"
 	else
 		local save_sp=${SANDBOX_PREDICT}
 		addpredict /
 		__ebuild_phase pre_src_test
 
-		__vecho ">>> Test phase: ${CATEGORY}/${PF}"
+		__vecho ">>>> Test phase: ${CATEGORY}/${PF}"
 		__ebuild_phase src_test
-		__vecho ">>> Completed testing ${CATEGORY}/${PF}"
+		__vecho ">>>> Completed testing ${CATEGORY}/${PF}"
 
 		>> "$PORTAGE_BUILDDIR/.tested" || \
 			die "Failed to create $PORTAGE_BUILDDIR/.tested"
@@ -523,8 +523,8 @@ __dyn_install() {
 	if has noauto $FEATURES ; then
 		rm -f "${PORTAGE_BUILDDIR}/.installed"
 	elif [[ -e $PORTAGE_BUILDDIR/.installed ]] ; then
-		__vecho ">>> It appears that '${PF}' is already installed; skipping."
-		__vecho ">>> Remove '${PORTAGE_BUILDDIR}/.installed' to force install."
+		__vecho ">>>> It appears that '${PF}' is already installed; skipping."
+		__vecho ">>>> Remove '${PORTAGE_BUILDDIR}/.installed' to force install."
 		return 0
 	fi
 	trap "__abort_install" SIGINT SIGQUIT
@@ -578,7 +578,7 @@ __dyn_install() {
 	fi
 
 	__vecho
-	__vecho ">>> Install ${CATEGORY}/${PF} into ${D}"
+	__vecho ">>>> Install ${CATEGORY}/${PF} into ${D}"
 	#our custom version of libtool uses $S and $D to fix
 	#invalid paths in .la files
 	export S D
@@ -599,7 +599,7 @@ __dyn_install() {
 	__ebuild_phase src_install
 	>> "$PORTAGE_BUILDDIR/.installed" || \
 		die "Failed to create $PORTAGE_BUILDDIR/.installed"
-	__vecho ">>> Completed installing ${CATEGORY}/${PF} into ${D}"
+	__vecho ">>>> Completed installing ${CATEGORY}/${PF} into ${D}"
 	__vecho
 	__ebuild_phase post_src_install
 
@@ -1031,11 +1031,11 @@ __ebuild_main() {
 			if has noauto $FEATURES && \
 				[[ ! -f $PORTAGE_BUILDDIR/.unpacked ]] ; then
 				echo
-				echo "!!! We apparently haven't unpacked..." \
+				echo "!!!! We apparently haven't unpacked..." \
 					"This is probably not what you"
-				echo "!!! want to be doing... You are using" \
+				echo "!!!! want to be doing... You are using" \
 					"FEATURES=noauto so I'll assume"
-				echo "!!! that you know what you are doing..." \
+				echo "!!!! that you know what you are doing..." \
 					"You have 5 seconds to abort..."
 				echo
 
diff --git a/bin/phase-helpers.sh b/bin/phase-helpers.sh
index 94f4f24f2..3ccb58a9b 100644
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@ -269,8 +269,8 @@ use() {
 
 use_with() {
 	if [ -z "$1" ]; then
-		echo "!!! use_with() called without a parameter." >&2
-		echo "!!! use_with <USEFLAG> [<flagname> [value]]" >&2
+		echo "!!!! use_with() called without a parameter." >&2
+		echo "!!!! use_with <USEFLAG> [<flagname> [value]]" >&2
 		return 1
 	fi
 
@@ -291,8 +291,8 @@ use_with() {
 
 use_enable() {
 	if [ -z "$1" ]; then
-		echo "!!! use_enable() called without a parameter." >&2
-		echo "!!! use_enable <USEFLAG> [<flagname> [value]]" >&2
+		echo "!!!! use_enable() called without a parameter." >&2
+		echo "!!!! use_enable <USEFLAG> [<flagname> [value]]" >&2
 		return 1
 	fi
 
@@ -321,7 +321,7 @@ unpack() {
 	[ -z "$*" ] && die "Nothing passed to the 'unpack' command"
 
 	for x in "$@"; do
-		__vecho ">>> Unpacking ${x} to ${PWD}"
+		__vecho ">>>> Unpacking ${x} to ${PWD}"
 		suffix=${x##*.}
 		suffix_insensitive=$(LC_ALL=C tr "[:upper:]" "[:lower:]" <<< "${suffix}")
 		y=${x%.*}
@@ -703,8 +703,8 @@ econf() {
 
 			if [ -s config.log ]; then
 				echo
-				echo "!!! Please attach the following file when seeking support:"
-				echo "!!! ${PWD}/config.log"
+				echo "!!!! Please attach the following file when seeking support:"
+				echo "!!!! ${PWD}/config.log"
 			fi
 			# econf dies unconditionally in EAPIs 0 to 3
 			___eapi_helpers_can_die || die "econf failed"
@@ -1188,8 +1188,8 @@ if ___eapi_has_in_iuse; then
 		local use=${1}
 
 		if [[ -z "${use}" ]]; then
-			echo "!!! in_iuse() called without a parameter." >&2
-			echo "!!! in_iuse <USEFLAG>" >&2
+			echo "!!!! in_iuse() called without a parameter." >&2
+			echo "!!!! in_iuse <USEFLAG>" >&2
 			die "in_iuse() called without a parameter"
 		fi
 
diff --git a/bin/portageq b/bin/portageq
index d3cb9f140..9f94d001b 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -1304,9 +1304,9 @@ def add_pquery_arguments(parser):
 
 
 def usage(argv):
-	print(">>> Portage information query tool")
-	print(">>> %s" % portage.VERSION)
-	print(">>> Usage: portageq <command> [<option> ...]")
+	print(">>>> Portage information query tool")
+	print(">>>> %s" % portage.VERSION)
+	print(">>>> Usage: portageq <command> [<option> ...]")
 	print("")
 	print("Available commands:")
 
diff --git a/cnf/repo.postsync.d/example b/cnf/repo.postsync.d/example
index 72d91a60e..ac29cd416 100644
--- a/cnf/repo.postsync.d/example
+++ b/cnf/repo.postsync.d/example
@@ -41,7 +41,7 @@ if [ -n "${repository_name}" ]; then
 	if [ "${repository_name}" != "gentoo" ]; then
 		if ! egencache --update --repo="${repository_name}" --jobs=4
 		then
-			echo "!!! egencache failed!"
+			echo "!!!! egencache failed!"
 			ret=1
 		fi
 	fi
@@ -55,7 +55,7 @@ if [ -n "${repository_name}" ] && ! [ -e "${repository_path}/metadata/pkg_desc_i
 	# does not interfere with repository verification.
 	if ! egencache --update-pkg-desc-index --external-cache-only --repo="${repository_name}" ${PORTAGE_VERBOSE+--verbose}
 	then
-		echo "!!! egencache failed!"
+		echo "!!!! egencache failed!"
 		ret=1
 	fi
 fi
diff --git a/lib/_emerge/Binpkg.py b/lib/_emerge/Binpkg.py
index c7dde69bd..ae83b6b75 100644
--- a/lib/_emerge/Binpkg.py
+++ b/lib/_emerge/Binpkg.py
@@ -323,7 +323,7 @@ class Binpkg(CompositeTask):
 
         # This initializes PORTAGE_LOG_FILE.
         portage.prepare_build_dirs(self.settings["ROOT"], self.settings, 1)
-        self._writemsg_level(">>> Extracting info\n")
+        self._writemsg_level(">>>> Extracting info\n")
 
         await self._bintree.dbapi.unpack_metadata(
             self.settings, infloc, loop=self.scheduler
@@ -404,7 +404,7 @@ class Binpkg(CompositeTask):
             self._async_unlock_builddir(returncode=self.returncode)
             return
 
-        self._writemsg_level(">>> Extracting %s\n" % self.pkg.cpv)
+        self._writemsg_level(">>>> Extracting %s\n" % self.pkg.cpv)
         self._start_task(
             AsyncTaskFuture(
                 future=self._bintree.dbapi.unpack_contents(
@@ -418,7 +418,7 @@ class Binpkg(CompositeTask):
         if self._default_exit(unpack_contents) != os.EX_OK:
             unpack_contents.future.result()
             self._writemsg_level(
-                "!!! Error Extracting '%s'\n" % self._pkg_path,
+                "!!!! Error Extracting '%s'\n" % self._pkg_path,
                 noiselevel=-1,
                 level=logging.ERROR,
             )
@@ -462,13 +462,13 @@ class Binpkg(CompositeTask):
             scheduler=self.scheduler,
             logfile=self.settings.get("PORTAGE_LOG_FILE"),
         )
-        self._writemsg_level(">>> Adjusting Prefix to %s\n" % self.settings["EPREFIX"])
+        self._writemsg_level(">>>> Adjusting Prefix to %s\n" % self.settings["EPREFIX"])
         self._start_task(chpathtool, self._chpathtool_exit)
 
     def _chpathtool_exit(self, chpathtool):
         if self._final_exit(chpathtool) != os.EX_OK:
             self._writemsg_level(
-                "!!! Error Adjusting Prefix to %s\n" % (self.settings["EPREFIX"],),
+                "!!!! Error Adjusting Prefix to %s\n" % (self.settings["EPREFIX"],),
                 noiselevel=-1,
                 level=logging.ERROR,
             )
diff --git a/lib/_emerge/BinpkgExtractorAsync.py b/lib/_emerge/BinpkgExtractorAsync.py
index a0380a0a4..9219882fe 100644
--- a/lib/_emerge/BinpkgExtractorAsync.py
+++ b/lib/_emerge/BinpkgExtractorAsync.py
@@ -58,7 +58,7 @@ class BinpkgExtractorAsync(SpawnProcess):
             decomp_cmd = None
         if decomp_cmd is None:
             self.scheduler.output(
-                "!!! %s\n"
+                "!!!! %s\n"
                 % _("File compression header unrecognized: %s")
                 % self.pkg_path,
                 log_path=self.logfile,
@@ -90,7 +90,7 @@ class BinpkgExtractorAsync(SpawnProcess):
             if find_binary(decompression_binary) is None:
                 missing_package = decomp.get("package")
                 self.scheduler.output(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _(
                         "File compression unsupported %s.\n Command was: %s.\n Maybe missing package: %s"
                     )
diff --git a/lib/_emerge/BinpkgVerifier.py b/lib/_emerge/BinpkgVerifier.py
index 6d8efb9c4..7a0a40028 100644
--- a/lib/_emerge/BinpkgVerifier.py
+++ b/lib/_emerge/BinpkgVerifier.py
@@ -43,7 +43,7 @@ class BinpkgVerifier(CompositeTask):
             if e.errno not in (errno.ENOENT, errno.ESTALE):
                 raise
             self.scheduler.output(
-                ("!!! Fetching Binary failed " "for '%s'\n") % self.pkg.cpv,
+                ("!!!! Fetching Binary failed " "for '%s'\n") % self.pkg.cpv,
                 log_path=self.logfile,
                 background=self.background,
             )
@@ -127,11 +127,11 @@ class BinpkgVerifier(CompositeTask):
 
         self.scheduler.output(
             (
-                "\n!!! Digest verification failed:\n"
-                "!!! %s\n"
-                "!!! Reason: Failed on %s verification\n"
-                "!!! Got: %s\n"
-                "!!! Expected: %s\n"
+                "\n!!!! Digest verification failed:\n"
+                "!!!! %s\n"
+                "!!!! Reason: Failed on %s verification\n"
+                "!!!! Got: %s\n"
+                "!!!! Expected: %s\n"
                 "File renamed to '%s'\n"
             )
             % (self._pkg_path, name, value, expected, temp_filename),
diff --git a/lib/_emerge/BlockerCache.py b/lib/_emerge/BlockerCache.py
index 5aad581f4..581b98a38 100644
--- a/lib/_emerge/BlockerCache.py
+++ b/lib/_emerge/BlockerCache.py
@@ -62,7 +62,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                 pass
             else:
                 writemsg(
-                    "!!! Error loading '%s': %s\n" % (self._cache_filename, str(e)),
+                    "!!!! Error loading '%s': %s\n" % (self._cache_filename, str(e)),
                     noiselevel=-1,
                 )
             del e
diff --git a/lib/_emerge/BlockerDB.py b/lib/_emerge/BlockerDB.py
index b6542157c..e778fdd90 100644
--- a/lib/_emerge/BlockerDB.py
+++ b/lib/_emerge/BlockerDB.py
@@ -71,7 +71,7 @@ class BlockerDB:
                         inst_pkg.root, portage.VDB_PATH, inst_pkg.category, inst_pkg.pf
                     )
                     portage.writemsg(
-                        "!!! %s/*DEPEND: %s\n" % (pkg_location, atoms), noiselevel=-1
+                        "!!!! %s/*DEPEND: %s\n" % (pkg_location, atoms), noiselevel=-1
                     )
                     continue
 
diff --git a/lib/_emerge/EbuildBuild.py b/lib/_emerge/EbuildBuild.py
index 2ed16537b..caf2e45d2 100644
--- a/lib/_emerge/EbuildBuild.py
+++ b/lib/_emerge/EbuildBuild.py
@@ -447,7 +447,7 @@ class EbuildBuild(CompositeTask):
             return
 
         if self._issyspkg:
-            msg = ">>> This is a system package, " + "let's pack a rescue tarball.\n"
+            msg = ">>>> This is a system package, " + "let's pack a rescue tarball.\n"
             self.scheduler.output(msg, log_path=self.settings.get("PORTAGE_LOG_FILE"))
 
         binpkg_tasks = TaskSequence()
diff --git a/lib/_emerge/EbuildIpcDaemon.py b/lib/_emerge/EbuildIpcDaemon.py
index ee6fd7658..c32465ad4 100644
--- a/lib/_emerge/EbuildIpcDaemon.py
+++ b/lib/_emerge/EbuildIpcDaemon.py
@@ -111,7 +111,7 @@ class EbuildIpcDaemon(FifoIpcDaemon):
             # This probably means that the client has been killed,
             # which causes open to fail with ENXIO.
             writemsg_level(
-                "!!! EbuildIpcDaemon %s: %s\n" % (_("failed to send reply"), e),
+                "!!!! EbuildIpcDaemon %s: %s\n" % (_("failed to send reply"), e),
                 level=logging.ERROR,
                 noiselevel=-1,
             )
diff --git a/lib/_emerge/EbuildPhase.py b/lib/_emerge/EbuildPhase.py
index 12326fffd..9f28bdfef 100644
--- a/lib/_emerge/EbuildPhase.py
+++ b/lib/_emerge/EbuildPhase.py
@@ -387,7 +387,7 @@ class EbuildPhase(CompositeTask):
             self._append_temp_log(post_phase.logfile, log_path)
 
         if self._final_exit(post_phase) != os.EX_OK:
-            writemsg("!!! post %s failed; exiting.\n" % self.phase, noiselevel=-1)
+            writemsg("!!!! post %s failed; exiting.\n" % self.phase, noiselevel=-1)
             self._die_hooks()
             return
 
diff --git a/lib/_emerge/JobStatusDisplay.py b/lib/_emerge/JobStatusDisplay.py
index e3cb2ff0f..bc50c4149 100644
--- a/lib/_emerge/JobStatusDisplay.py
+++ b/lib/_emerge/JobStatusDisplay.py
@@ -127,7 +127,7 @@ class JobStatusDisplay:
         return True
 
     def _format_msg(self, msg):
-        return ">>> %s" % msg
+        return ">>>> %s" % msg
 
     def _erase(self):
         self._write(self._term_codes["carriage_return"] + self._term_codes["clr_eol"])
diff --git a/lib/_emerge/MergeListItem.py b/lib/_emerge/MergeListItem.py
index 87767c153..e666998cb 100644
--- a/lib/_emerge/MergeListItem.py
+++ b/lib/_emerge/MergeListItem.py
@@ -81,7 +81,7 @@ class MergeListItem(CompositeTask):
         if not build_opts.pretend:
             self.statusMessage(msg)
             logger.log(
-                " >>> emerge (%s of %s) %s to %s"
+                " >>>> emerge (%s of %s) %s to %s"
                 % (pkg_count.curval, pkg_count.maxval, pkg.cpv, pkg.root)
             )
 
diff --git a/lib/_emerge/PackageUninstall.py b/lib/_emerge/PackageUninstall.py
index 468db3030..a5cb8c937 100644
--- a/lib/_emerge/PackageUninstall.py
+++ b/lib/_emerge/PackageUninstall.py
@@ -93,7 +93,7 @@ class PackageUninstall(CompositeTask):
             self._async_unlock_builddir(returncode=retval)
             return
 
-        self._writemsg_level(">>> Unmerging %s...\n" % (self.pkg.cpv,), noiselevel=-1)
+        self._writemsg_level(">>>> Unmerging %s...\n" % (self.pkg.cpv,), noiselevel=-1)
         self._emergelog("=== Unmerging... (%s)" % (self.pkg.cpv,))
 
         cat, pf = portage.catsplit(self.pkg.cpv)
@@ -115,9 +115,9 @@ class PackageUninstall(CompositeTask):
 
     def _unmerge_exit(self, unmerge_task):
         if self._final_exit(unmerge_task) != os.EX_OK:
-            self._emergelog(" !!! unmerge FAILURE: %s" % (self.pkg.cpv,))
+            self._emergelog(" !!!! unmerge FAILURE: %s" % (self.pkg.cpv,))
         else:
-            self._emergelog(" >>> unmerge success: %s" % (self.pkg.cpv,))
+            self._emergelog(" >>>> unmerge success: %s" % (self.pkg.cpv,))
             self.world_atom(self.pkg)
         self._async_unlock_builddir(returncode=self.returncode)
 
diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py
index 15d646c4f..6f82965e9 100644
--- a/lib/_emerge/Scheduler.py
+++ b/lib/_emerge/Scheduler.py
@@ -303,22 +303,22 @@ class Scheduler(PollScheduler):
             or "--fetchonly" in self.myopts
         ):
             if "distlocks" not in features:
-                portage.writemsg(red("!!!") + "\n", noiselevel=-1)
+                portage.writemsg(red("!!!!") + "\n", noiselevel=-1)
                 portage.writemsg(
-                    red("!!!")
+                    red("!!!!")
                     + " parallel-fetching "
                     + "requires the distlocks feature enabled"
                     + "\n",
                     noiselevel=-1,
                 )
                 portage.writemsg(
-                    red("!!!")
+                    red("!!!!")
                     + " you have it disabled, "
                     + "thus parallel-fetching is being disabled"
                     + "\n",
                     noiselevel=-1,
                 )
-                portage.writemsg(red("!!!") + "\n", noiselevel=-1)
+                portage.writemsg(red("!!!!") + "\n", noiselevel=-1)
             elif merge_count > 1:
                 self._parallel_fetch = True
 
@@ -442,7 +442,7 @@ class Scheduler(PollScheduler):
             if interactive_tasks:
                 background = False
                 writemsg_level(
-                    ">>> Sending package output to stdio due "
+                    ">>>> Sending package output to stdio due "
                     + "to interactive package(s):\n",
                     level=logging.INFO,
                     noiselevel=-1,
@@ -462,15 +462,15 @@ class Scheduler(PollScheduler):
                 if self._max_jobs is True or self._max_jobs > 1:
                     self._set_max_jobs(1)
                     writemsg_level(
-                        ">>> Setting --jobs=1 due "
+                        ">>>> Setting --jobs=1 due "
                         + "to the above interactive package(s)\n",
                         level=logging.INFO,
                         noiselevel=-1,
                     )
                     writemsg_level(
-                        ">>> In order to temporarily mask "
+                        ">>>> In order to temporarily mask "
                         + "interactive updates, you may\n"
-                        + ">>> specify --accept-properties=-interactive\n",
+                        + ">>>> specify --accept-properties=-interactive\n",
                         level=logging.INFO,
                         noiselevel=-1,
                     )
@@ -732,7 +732,7 @@ class Scheduler(PollScheduler):
             pkgsettings["O"] = os.path.dirname(ebuild_path)
             if not digestgen(mysettings=pkgsettings, myportdb=portdb):
                 writemsg_level(
-                    "!!! Unable to generate manifest for '%s'.\n" % x.cpv,
+                    "!!!! Unable to generate manifest for '%s'.\n" % x.cpv,
                     level=logging.ERROR,
                     noiselevel=-1,
                 )
@@ -2250,7 +2250,7 @@ class Scheduler(PollScheduler):
                         world_set.add(atom)
                     else:
                         writemsg_level(
-                            '\n!!! Unable to record %s in "world"\n' % (atom,),
+                            '\n!!!! Unable to record %s in "world"\n' % (atom,),
                             level=logging.WARN,
                             noiselevel=-1,
                         )
diff --git a/lib/_emerge/SpawnProcess.py b/lib/_emerge/SpawnProcess.py
index c43b17c12..2e5cfe6bc 100644
--- a/lib/_emerge/SpawnProcess.py
+++ b/lib/_emerge/SpawnProcess.py
@@ -267,7 +267,7 @@ class SpawnProcess(SubProcess):
                         if e.errno == errno.EPERM:
                             # Reported with hardened kernel (bug #358211).
                             writemsg_level(
-                                "!!! kill: (%i) - Operation not permitted\n" % (p,),
+                                "!!!! kill: (%i) - Operation not permitted\n" % (p,),
                                 level=logging.ERROR,
                                 noiselevel=-1,
                             )
diff --git a/lib/_emerge/SubProcess.py b/lib/_emerge/SubProcess.py
index e2d2e61be..3383829ae 100644
--- a/lib/_emerge/SubProcess.py
+++ b/lib/_emerge/SubProcess.py
@@ -31,7 +31,7 @@ class SubProcess(AbstractPollTask):
                 if e.errno == errno.EPERM:
                     # Reported with hardened kernel (bug #358211).
                     writemsg_level(
-                        "!!! kill: (%i) - Operation not permitted\n" % (self.pid,),
+                        "!!!! kill: (%i) - Operation not permitted\n" % (self.pid,),
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
diff --git a/lib/_emerge/actions.py b/lib/_emerge/actions.py
index 05a115250..aa9316a46 100644
--- a/lib/_emerge/actions.py
+++ b/lib/_emerge/actions.py
@@ -171,7 +171,9 @@ def action_build(
                 getbinpkgs="--getbinpkg" in emerge_config.opts, **kwargs
             )
         except ParseError as e:
-            writemsg("\n\n!!!%s.\nSee make.conf(5) for more info.\n" % e, noiselevel=-1)
+            writemsg(
+                "\n\n!!!!%s.\nSee make.conf(5) for more info.\n" % e, noiselevel=-1
+            )
             return 1
 
     # validate the state of the resume data
@@ -364,9 +366,9 @@ def action_build(
         if success:
             if dropped_tasks:
                 portage.writemsg(
-                    "!!! One or more packages have been "
+                    "!!!! One or more packages have been "
                     + "dropped due to\n"
-                    + "!!! masking or unsatisfied dependencies:\n\n",
+                    + "!!!! masking or unsatisfied dependencies:\n\n",
                     noiselevel=-1,
                 )
                 for task, atoms in dropped_tasks.items():
@@ -430,7 +432,7 @@ def action_build(
                         )
                     except ParseError as e:
                         writemsg(
-                            "\n\n!!!%s.\nSee make.conf(5) for more info.\n" % e,
+                            "\n\n!!!!%s.\nSee make.conf(5) for more info.\n" % e,
                             noiselevel=-1,
                         )
                         return 1
@@ -577,7 +579,7 @@ def action_build(
             for eroot in eroots:
                 if need_write_vardb and not trees[eroot]["vartree"].dbapi.writable:
                     writemsg_level(
-                        "!!! %s\n"
+                        "!!!! %s\n"
                         % _("Read-only file system: %s")
                         % trees[eroot]["vartree"].dbapi._dbroot,
                         level=logging.ERROR,
@@ -596,7 +598,7 @@ def action_build(
                     and not trees[eroot]["bintree"].dbapi.writable
                 ):
                     writemsg_level(
-                        "!!! %s\n"
+                        "!!!! %s\n"
                         % _("Read-only file system: %s")
                         % trees[eroot]["bintree"].pkgdir,
                         level=logging.ERROR,
@@ -639,7 +641,7 @@ def action_build(
 
             if retval == os.EX_OK and not (buildpkgonly or fetchonly or pretend):
                 if "yes" == settings.get("AUTOCLEAN"):
-                    portage.writemsg_stdout(">>> Auto-cleaning packages...\n")
+                    portage.writemsg_stdout(">>>> Auto-cleaning packages...\n")
                     unmerge(
                         trees[settings["EROOT"]]["root_config"],
                         myopts,
@@ -662,15 +664,15 @@ def action_config(settings, trees, myopts, myfiles):
     enter_invalid = "--ask-enter-invalid" in myopts
     uq = UserQuery(myopts)
     if len(myfiles) != 1:
-        print(red("!!! config can only take a single package atom at this time\n"))
+        print(red("!!!! config can only take a single package atom at this time\n"))
         sys.exit(1)
     if not is_valid_package_atom(myfiles[0], allow_repo=True):
         portage.writemsg(
-            "!!! '%s' is not a valid package atom.\n" % myfiles[0], noiselevel=-1
+            "!!!! '%s' is not a valid package atom.\n" % myfiles[0], noiselevel=-1
         )
-        portage.writemsg("!!! Please check ebuild(5) for full details.\n")
+        portage.writemsg("!!!! Please check ebuild(5) for full details.\n")
         portage.writemsg(
-            "!!! (Did you specify a version but forget to prefix with '='?)\n"
+            "!!!! (Did you specify a version but forget to prefix with '='?)\n"
         )
         sys.exit(1)
     print()
@@ -801,7 +803,7 @@ def action_depclean(
                     noiselevel=-1,
                 )
         if not matched_packages:
-            writemsg_level(">>> No packages selected for removal by %s\n" % action)
+            writemsg_level(">>>> No packages selected for removal by %s\n" % action)
             return 0
 
     # The calculation is done in a separate function so that depgraph
@@ -899,7 +901,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
             # A nested set could not be resolved, so ignore nested sets.
             set_atoms[k] = root_config.sets[k].getAtoms()
             writemsg_level(
-                _("!!! The set '%s' " "contains a non-existent set named '%s'.\n")
+                _("!!!! The set '%s' " "contains a non-existent set named '%s'.\n")
                 % (k, e),
                 level=logging.ERROR,
                 noiselevel=-1,
@@ -909,12 +911,12 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
     # Support @profile as an alternative to @system.
     if not (set_atoms["system"] or set_atoms["profile"]):
         writemsg_level(
-            _("!!! You have no system list.\n"), level=logging.WARNING, noiselevel=-1
+            _("!!!! You have no system list.\n"), level=logging.WARNING, noiselevel=-1
         )
 
     if not set_atoms["selected"]:
         writemsg_level(
-            _("!!! You have no world file.\n"), level=logging.WARNING, noiselevel=-1
+            _("!!!! You have no world file.\n"), level=logging.WARNING, noiselevel=-1
         )
 
     # Suppress world file warnings unless @world is completely empty,
@@ -923,7 +925,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
         world_atoms = bool(root_config.setconfig.getSetAtoms("world"))
     except portage.exception.PackageSetNotFound as e:
         writemsg_level(
-            _("!!! The set '%s' " "contains a non-existent set named '%s'.\n")
+            _("!!!! The set '%s' " "contains a non-existent set named '%s'.\n")
             % ("world", e),
             level=logging.ERROR,
             noiselevel=-1,
@@ -932,20 +934,22 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
     else:
         if not world_atoms:
             writemsg_level(
-                _("!!! Your @world set is empty.\n"), level=logging.ERROR, noiselevel=-1
+                _("!!!! Your @world set is empty.\n"),
+                level=logging.ERROR,
+                noiselevel=-1,
             )
             set_error = True
 
     if set_error:
         writemsg_level(
-            _("!!! Aborting due to set configuration " "errors displayed above.\n"),
+            _("!!!! Aborting due to set configuration " "errors displayed above.\n"),
             level=logging.ERROR,
             noiselevel=-1,
         )
         return _depclean_result(1, [], False, 0, None)
 
     if action == "depclean":
-        emergelog(xterm_titles, " >>> depclean")
+        emergelog(xterm_titles, " >>>> depclean")
 
     writemsg_level("\nCalculating dependencies  ")
     resolver_params = create_depgraph_params(myopts, "remove")
@@ -1285,14 +1289,14 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
                         show_parents(pkg)
 
         if not pkgs_to_remove:
-            writemsg_level(">>> No packages selected for removal by %s\n" % action)
+            writemsg_level(">>>> No packages selected for removal by %s\n" % action)
             if "--verbose" not in myopts:
                 writemsg_level(
-                    ">>> To see reverse dependencies, use %s\n" % good("--verbose")
+                    ">>>> To see reverse dependencies, use %s\n" % good("--verbose")
                 )
             if action == "prune":
                 writemsg_level(
-                    ">>> To ignore dependencies, use %s\n" % good("--nodeps")
+                    ">>>> To ignore dependencies, use %s\n" % good("--nodeps")
                 )
 
         return pkgs_to_remove
@@ -1324,7 +1328,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
         provider_cache = {}
         consumer_map = {}
 
-        writemsg_level(">>> Checking for lib consumers...\n")
+        writemsg_level(">>>> Checking for lib consumers...\n")
 
         for pkg in cleanlist:
 
@@ -1391,7 +1395,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
                         search_files.add(lib_consumer)
                         search_files.update(providers)
 
-            writemsg_level(">>> Assigning files to packages...\n")
+            writemsg_level(">>>> Assigning files to packages...\n")
             file_owners = {}
             for f in search_files:
                 owner_set = set()
@@ -1498,7 +1502,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
 
             # Add lib providers to the graph as children of lib consumers,
             # and also add any dependencies pulled in by the provider.
-            writemsg_level(">>> Adding lib providers to graph...\n")
+            writemsg_level(">>>> Adding lib providers to graph...\n")
 
             for pkg, consumers in consumer_map.items():
                 for consumer_dblink in set(chain(*consumers.values())):
@@ -1538,7 +1542,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes, myopts, action, args_set, spi
             clean_set = set(cleanlist)
 
     if clean_set:
-        writemsg_level(">>> Calculating removal order...\n")
+        writemsg_level(">>>> Calculating removal order...\n")
         # Use a topological sort to create an unmerge order such that
         # each package is unmerged before it's dependencies. This is
         # necessary to avoid breaking things that may need to run
@@ -1747,7 +1751,7 @@ def action_deselect(settings, trees, opts, atoms):
                     filename = "world"
 
                 writemsg_stdout(
-                    '>>> %s %s from "%s" favorites file...\n'
+                    '>>>> %s %s from "%s" favorites file...\n'
                     % (action_desc, colorize("INFORM", str(atom)), filename),
                     noiselevel=-1,
                 )
@@ -1766,7 +1770,7 @@ def action_deselect(settings, trees, opts, atoms):
             if not pretend:
                 world_set.replace(remaining)
         else:
-            print('>>> No matching atoms found in "world" favorites file...')
+            print('>>>> No matching atoms found in "world" favorites file...')
     finally:
         if locked:
             world_set.unlock()
@@ -2263,7 +2267,7 @@ def action_info(settings, trees, myopts, myfiles):
                     continue
 
             writemsg_stdout(
-                ">>> Attempting to run pkg_info() for '%s'\n" % pkg.cpv, noiselevel=-1
+                ">>>> Attempting to run pkg_info() for '%s'\n" % pkg.cpv, noiselevel=-1
             )
 
             if pkg_type == "installed":
@@ -2353,7 +2357,7 @@ def action_search(root_config, myopts, myfiles, spinner):
                 searchinstance.execute(mysearch)
             except re.error as comment:
                 print(
-                    '\n!!! Regular expression error in "%s": %s' % (mysearch, comment)
+                    '\n!!!! Regular expression error in "%s": %s' % (mysearch, comment)
                 )
                 sys.exit(1)
             searchinstance.output()
@@ -2426,7 +2430,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
                 )
                 for line in textwrap.wrap(msg, 70):
                     writemsg_level(
-                        "!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
+                        "!!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
                     )
                 for i in e.args[0]:
                     writemsg_level(
@@ -2440,7 +2444,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
                 if atom.use and atom.use.conditional:
                     writemsg_level(
                         (
-                            "\n\n!!! '%s' contains a conditional "
+                            "\n\n!!!! '%s' contains a conditional "
                             + "which is not allowed.\n"
                         )
                         % (x,),
@@ -2448,7 +2452,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
                         noiselevel=-1,
                     )
                     writemsg_level(
-                        "!!! Please check ebuild(5) for full details.\n",
+                        "!!!! Please check ebuild(5) for full details.\n",
                         level=logging.ERROR,
                     )
                     return 1
@@ -2457,7 +2461,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
         elif x.startswith(os.sep):
             if not x.startswith(eroot):
                 writemsg_level(
-                    ("!!! '%s' does not start with" + " $EROOT.\n") % x,
+                    ("!!!! '%s' does not start with" + " $EROOT.\n") % x,
                     level=logging.ERROR,
                     noiselevel=-1,
                 )
@@ -2477,7 +2481,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
                 msg.append("'%s' is not a valid package atom." % (x,))
                 msg.append("Please check ebuild(5) for full details.")
                 writemsg_level(
-                    "".join("!!! %s\n" % line for line in msg),
+                    "".join("!!!! %s\n" % line for line in msg),
                     level=logging.ERROR,
                     noiselevel=-1,
                 )
@@ -2512,7 +2516,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
             msg.append("'%s' is not a valid package atom." % (x,))
             msg.append("Please check ebuild(5) for full details.")
             writemsg_level(
-                "".join("!!! %s\n" % line for line in msg),
+                "".join("!!!! %s\n" % line for line in msg),
                 level=logging.ERROR,
                 noiselevel=-1,
             )
@@ -2542,7 +2546,7 @@ def action_uninstall(settings, trees, ldpath_mtimes, opts, action, files, spinne
                 valid_atoms.append(portage.dep.Atom(atom))
         else:
             writemsg_level(
-                ("!!! '%s' is not claimed " + "by any package.\n") % lookup_owners[0],
+                ("!!!! '%s' is not claimed " + "by any package.\n") % lookup_owners[0],
                 level=logging.WARNING,
                 noiselevel=-1,
             )
@@ -2657,9 +2661,10 @@ def adjust_config(myopts, settings):
     try:
         CLEAN_DELAY = int(settings.get("CLEAN_DELAY", str(CLEAN_DELAY)))
     except ValueError as e:
-        portage.writemsg("!!! %s\n" % str(e), noiselevel=-1)
+        portage.writemsg("!!!! %s\n" % str(e), noiselevel=-1)
         portage.writemsg(
-            "!!! Unable to parse integer: CLEAN_DELAY='%s'\n" % settings["CLEAN_DELAY"],
+            "!!!! Unable to parse integer: CLEAN_DELAY='%s'\n"
+            % settings["CLEAN_DELAY"],
             noiselevel=-1,
         )
     settings["CLEAN_DELAY"] = str(CLEAN_DELAY)
@@ -2671,9 +2676,9 @@ def adjust_config(myopts, settings):
             settings.get("EMERGE_WARNING_DELAY", str(EMERGE_WARNING_DELAY))
         )
     except ValueError as e:
-        portage.writemsg("!!! %s\n" % str(e), noiselevel=-1)
+        portage.writemsg("!!!! %s\n" % str(e), noiselevel=-1)
         portage.writemsg(
-            "!!! Unable to parse integer: EMERGE_WARNING_DELAY='%s'\n"
+            "!!!! Unable to parse integer: EMERGE_WARNING_DELAY='%s'\n"
             % settings["EMERGE_WARNING_DELAY"],
             noiselevel=-1,
         )
@@ -2705,14 +2710,17 @@ def adjust_config(myopts, settings):
         PORTAGE_DEBUG = int(settings.get("PORTAGE_DEBUG", str(PORTAGE_DEBUG)))
         if PORTAGE_DEBUG not in (0, 1):
             portage.writemsg(
-                "!!! Invalid value: PORTAGE_DEBUG='%i'\n" % PORTAGE_DEBUG, noiselevel=-1
+                "!!!! Invalid value: PORTAGE_DEBUG='%i'\n" % PORTAGE_DEBUG,
+                noiselevel=-1,
+            )
+            portage.writemsg(
+                "!!!! PORTAGE_DEBUG must be either 0 or 1\n", noiselevel=-1
             )
-            portage.writemsg("!!! PORTAGE_DEBUG must be either 0 or 1\n", noiselevel=-1)
             PORTAGE_DEBUG = 0
     except ValueError as e:
-        portage.writemsg("!!! %s\n" % str(e), noiselevel=-1)
+        portage.writemsg("!!!! %s\n" % str(e), noiselevel=-1)
         portage.writemsg(
-            "!!! Unable to parse integer: PORTAGE_DEBUG='%s'\n"
+            "!!!! Unable to parse integer: PORTAGE_DEBUG='%s'\n"
             % settings["PORTAGE_DEBUG"],
             noiselevel=-1,
         )
@@ -2910,9 +2918,9 @@ def getgccversion(chost=None):
     gcc_ver_prefix = "gcc-"
 
     gcc_not_found_error = red(
-        "!!! No gcc found. You probably need to 'source /etc/profile'\n"
-        + "!!! to update the environment of this terminal and possibly\n"
-        + "!!! other terminals also.\n"
+        "!!!! No gcc found. You probably need to 'source /etc/profile'\n"
+        + "!!!! to update the environment of this terminal and possibly\n"
+        + "!!!! other terminals also.\n"
     )
 
     if chost:
@@ -2992,7 +3000,7 @@ def check_procfs():
         return os.EX_OK
     msg = "It seems that %s is not mounted. You have been warned." % procfs_path
     writemsg_level(
-        "".join("!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
+        "".join("!!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
         level=logging.ERROR,
         noiselevel=-1,
     )
@@ -3003,7 +3011,7 @@ def config_protect_check(trees):
     for root, root_trees in trees.items():
         settings = root_trees["root_config"].settings
         if not settings.get("CONFIG_PROTECT"):
-            msg = "!!! CONFIG_PROTECT is empty"
+            msg = "!!!! CONFIG_PROTECT is empty"
             if settings["ROOT"] != "/":
                 msg += " for '%s'" % root
             msg += "\n"
@@ -3099,7 +3107,7 @@ def missing_sets_warning(root_config, missing_sets):
         % (os.path.join(global_config_path, "sets/portage.conf"),)
     )
     msg.append("        is missing or corrupt.")
-    msg.append("        Falling back to default world and system set configuration!!!")
+    msg.append("        Falling back to default world and system set configuration!!!!")
     for line in msg:
         writemsg_level(line + "\n", level=logging.ERROR, noiselevel=-1)
 
@@ -3405,7 +3413,7 @@ def run_action(emerge_config):
                 )
             except ParseError as e:
                 writemsg(
-                    "\n\n!!!%s.\nSee make.conf(5) for more info.\n" % (e,),
+                    "\n\n!!!!%s.\nSee make.conf(5) for more info.\n" % (e,),
                     noiselevel=-1,
                 )
                 return 1
@@ -3488,7 +3496,7 @@ def run_action(emerge_config):
             print(
                 colorize(
                     "BAD",
-                    "\n*** emerging by path is broken " "and may not always work!!!\n",
+                    "\n*** emerging by path is broken " "and may not always work!!!!\n",
                 )
             )
             break
@@ -3579,7 +3587,7 @@ def run_action(emerge_config):
     # note: this breaks `emerge --ask | tee logfile`, but that doesn't work anyway.
     if ("--ask" in emerge_config.opts) and (not sys.stdin.isatty()):
         portage.writemsg(
-            '!!! "--ask" should only be used in a terminal. Exiting.\n', noiselevel=-1
+            '!!!! "--ask" should only be used in a terminal. Exiting.\n', noiselevel=-1
         )
         return 1
 
@@ -3708,8 +3716,8 @@ def run_action(emerge_config):
                 portage.util.ensure_dirs(emerge_log_dir)
             except portage.exception.PortageException as e:
                 writemsg_level(
-                    "!!! Error creating directory for "
-                    + "EMERGE_LOG_DIR='%s':\n!!! %s\n" % (emerge_log_dir, e),
+                    "!!!! Error creating directory for "
+                    + "EMERGE_LOG_DIR='%s':\n!!!! %s\n" % (emerge_log_dir, e),
                     noiselevel=-1,
                     level=logging.ERROR,
                 )
@@ -3874,7 +3882,7 @@ def run_action(emerge_config):
                     )
                     for line in textwrap.wrap(msg, 70):
                         writemsg_level(
-                            "!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
+                            "!!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
                         )
                     for i in e.args[0]:
                         writemsg_level(
@@ -3889,7 +3897,7 @@ def run_action(emerge_config):
             msg.append("'%s' is not a valid package atom." % (x,))
             msg.append("Please check ebuild(5) for full details.")
             writemsg_level(
-                "".join("!!! %s\n" % line for line in msg),
+                "".join("!!!! %s\n" % line for line in msg),
                 level=logging.ERROR,
                 noiselevel=-1,
             )
@@ -3920,7 +3928,7 @@ def run_action(emerge_config):
             msg.append("'%s' is not a valid package atom." % (x,))
             msg.append("Please check ebuild(5) for full details.")
             writemsg_level(
-                "".join("!!! %s\n" % line for line in msg),
+                "".join("!!!! %s\n" % line for line in msg),
                 level=logging.ERROR,
                 noiselevel=-1,
             )
diff --git a/lib/_emerge/countdown.py b/lib/_emerge/countdown.py
index 9d506c3c7..f40ebbf05 100644
--- a/lib/_emerge/countdown.py
+++ b/lib/_emerge/countdown.py
@@ -10,8 +10,8 @@ from portage.output import colorize
 def countdown(secs=5, doing="Starting"):
     if secs:
         print(
-            ">>> Waiting %s seconds before starting...\n"
-            ">>> (Control-C to abort)...\n"
+            ">>>> Waiting %s seconds before starting...\n"
+            ">>>> (Control-C to abort)...\n"
             "%s in:" % (secs, doing),
             end="",
         )
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index 22d0be196..7c869ae75 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -1140,7 +1140,7 @@ class depgraph:
             "\n%s\n\n"
             % colorize(
                 "WARN",
-                "!!! Detected ebuild dependency change(s) without revision bump:",
+                "!!!! Detected ebuild dependency change(s) without revision bump:",
             ),
             noiselevel=-1,
         )
@@ -1223,7 +1223,7 @@ class depgraph:
     def _show_ignored_binaries_respect_use(self, respect_use):
 
         writemsg(
-            "\n!!! The following binary packages have been ignored "
+            "\n!!!! The following binary packages have been ignored "
             + "due to non matching USE:\n\n",
             noiselevel=-1,
         )
@@ -1256,7 +1256,7 @@ class depgraph:
     def _show_ignored_binaries_changed_deps(self, changed_deps):
 
         writemsg(
-            "\n!!! The following binary packages have been "
+            "\n!!!! The following binary packages have been "
             "ignored due to changed dependencies:\n\n",
             noiselevel=-1,
         )
@@ -1364,7 +1364,7 @@ class depgraph:
                 continue
 
             writemsg(
-                "\n!!! The following update has been skipped "
+                "\n!!!! The following update has been skipped "
                 + "due to unsatisfied dependencies:\n\n",
                 noiselevel=-1,
             )
@@ -1393,9 +1393,9 @@ class depgraph:
             # These are shown in abbreviated form, in order to avoid terminal
             # flooding from mask messages as reported in bug #285832.
             writemsg(
-                "\n!!! The following update(s) have been skipped "
+                "\n!!!! The following update(s) have been skipped "
                 + "due to unsatisfied dependencies\n"
-                + "!!! triggered by backtracking:\n\n",
+                + "!!!! triggered by backtracking:\n\n",
                 noiselevel=-1,
             )
             for pkg, parent_atoms in backtrack_masked:
@@ -1554,7 +1554,7 @@ class depgraph:
 
         if debug:
             writemsg_level(
-                "\n!!! Slot conflict handler started.\n",
+                "\n!!!! Slot conflict handler started.\n",
                 level=logging.DEBUG,
                 noiselevel=-1,
             )
@@ -1718,7 +1718,7 @@ class depgraph:
 
         if debug:
             writemsg_level(
-                "\n!!! Slot conflict graph:\n", level=logging.DEBUG, noiselevel=-1
+                "\n!!!! Slot conflict graph:\n", level=logging.DEBUG, noiselevel=-1
             )
             conflict_graph.debug_print()
 
@@ -1793,7 +1793,7 @@ class depgraph:
 
         if debug:
             writemsg_level(
-                "\n!!! Slot conflict solution:\n", level=logging.DEBUG, noiselevel=-1
+                "\n!!!! Slot conflict solution:\n", level=logging.DEBUG, noiselevel=-1
             )
             for conflict in conflicts:
                 writemsg_level(
@@ -1920,7 +1920,7 @@ class depgraph:
             ):
                 if debug:
                     writemsg_level(
-                        "!!! backtracking loop detected: %s %s\n"
+                        "!!!! backtracking loop detected: %s %s\n"
                         % (pkg, self._dynamic_config._runtime_pkg_mask[pkg]),
                         level=logging.DEBUG,
                         noiselevel=-1,
@@ -4567,11 +4567,13 @@ class depgraph:
                         x = os.path.join(pkgsettings["PKGDIR"], x)
                     else:
                         writemsg(
-                            "\n\n!!! Binary package '" + str(x) + "' does not exist.\n",
+                            "\n\n!!!! Binary package '"
+                            + str(x)
+                            + "' does not exist.\n",
                             noiselevel=-1,
                         )
                         writemsg(
-                            "!!! Please ensure the tbz2 exists as specified.\n\n",
+                            "!!!! Please ensure the tbz2 exists as specified.\n\n",
                             noiselevel=-1,
                         )
                         return 0, myfavorites
@@ -4625,7 +4627,7 @@ class depgraph:
                 tree_root = os.path.dirname(os.path.dirname(pkgdir))
                 cp = pkgdir[len(tree_root) + 1 :]
                 error_msg = (
-                    "\n\n!!! '%s' is not in a valid ebuild repository "
+                    "\n\n!!!! '%s' is not in a valid ebuild repository "
                     "hierarchy or does not exist\n"
                 ) % x
                 if not portage.isvalidatom(cp):
@@ -4690,7 +4692,7 @@ class depgraph:
             elif x.startswith(os.path.sep):
                 if not x.startswith(eroot):
                     portage.writemsg(
-                        ("\n\n!!! '%s' does not start with" + " $EROOT.\n") % x,
+                        ("\n\n!!!! '%s' does not start with" + " $EROOT.\n") % x,
                         noiselevel=-1,
                     )
                     self._dynamic_config._skip_restart = True
@@ -4703,7 +4705,7 @@ class depgraph:
                 if not f.startswith(eroot):
                     portage.writemsg(
                         (
-                            "\n\n!!! '%s' (resolved from '%s') does not start with"
+                            "\n\n!!!! '%s' (resolved from '%s') does not start with"
                             + " $EROOT.\n"
                         )
                         % (f, x),
@@ -4768,11 +4770,12 @@ class depgraph:
                     continue
                 if not is_valid_package_atom(x, allow_repo=True):
                     portage.writemsg(
-                        "\n\n!!! '%s' is not a valid package atom.\n" % x, noiselevel=-1
+                        "\n\n!!!! '%s' is not a valid package atom.\n" % x,
+                        noiselevel=-1,
                     )
-                    portage.writemsg("!!! Please check ebuild(5) for full details.\n")
+                    portage.writemsg("!!!! Please check ebuild(5) for full details.\n")
                     portage.writemsg(
-                        "!!! (Did you specify a version but forget to prefix with '='?)\n"
+                        "!!!! (Did you specify a version but forget to prefix with '='?)\n"
                     )
                     self._dynamic_config._skip_restart = True
                     return (0, [])
@@ -4865,13 +4868,13 @@ class depgraph:
                 if atom.use and atom.use.conditional:
                     writemsg(
                         (
-                            "\n\n!!! '%s' contains a conditional "
+                            "\n\n!!!! '%s' contains a conditional "
                             + "which is not allowed.\n"
                         )
                         % (x,),
                         noiselevel=-1,
                     )
-                    writemsg("!!! Please check ebuild(5) for full details.\n")
+                    writemsg("!!!! Please check ebuild(5) for full details.\n")
                     self._dynamic_config._skip_restart = True
                     return (0, [])
 
@@ -4896,7 +4899,7 @@ class depgraph:
 
             if not owners:
                 portage.writemsg(
-                    ("\n\n!!! '%s' is not claimed " + "by any package.\n")
+                    ("\n\n!!!! '%s' is not claimed " + "by any package.\n")
                     % lookup_owners[0],
                     noiselevel=-1,
                 )
@@ -5031,7 +5034,7 @@ class depgraph:
                             if not self.need_restart():
                                 writemsg(
                                     (
-                                        "\n\n!!! Problem "
+                                        "\n\n!!!! Problem "
                                         + "resolving dependencies for %s\n"
                                     )
                                     % arg.arg,
@@ -5132,7 +5135,7 @@ class depgraph:
                         elif isinstance(arg, SetArg):
                             writemsg(
                                 (
-                                    "\n\n!!! Problem resolving "
+                                    "\n\n!!!! Problem resolving "
                                     + "dependencies for %s from %s\n"
                                 )
                                 % (atom, arg.arg),
@@ -5140,7 +5143,10 @@ class depgraph:
                             )
                         else:
                             writemsg(
-                                ("\n\n!!! Problem resolving " + "dependencies for %s\n")
+                                (
+                                    "\n\n!!!! Problem resolving "
+                                    + "dependencies for %s\n"
+                                )
                                 % (atom,),
                                 noiselevel=-1,
                             )
@@ -5150,10 +5156,10 @@ class depgraph:
                     raise  # Needed else can't exit
                 except Exception as e:
                     writemsg(
-                        "\n\n!!! Problem in '%s' dependencies.\n" % atom, noiselevel=-1
+                        "\n\n!!!! Problem in '%s' dependencies.\n" % atom, noiselevel=-1
                     )
                     writemsg(
-                        "!!! %s %s\n" % (str(e), str(getattr(e, "__module__", None)))
+                        "!!!! %s %s\n" % (str(e), str(getattr(e, "__module__", None)))
                     )
                     raise
 
@@ -5674,7 +5680,7 @@ class depgraph:
                 )
             except InvalidDependString as e:
                 writemsg_level(
-                    "!!! Invalid RDEPEND in "
+                    "!!!! Invalid RDEPEND in "
                     + "'%svar/db/pkg/%s/RDEPEND': %s\n" % (pkg.root, pkg.cpv, e),
                     noiselevel=-1,
                     level=logging.ERROR,
@@ -5713,7 +5719,7 @@ class depgraph:
             if not pkg.installed:
                 raise
             writemsg_level(
-                "!!! Invalid RDEPEND in "
+                "!!!! Invalid RDEPEND in "
                 + "'%svar/db/pkg/%s/RDEPEND': %s\n" % (pkg.root, pkg.cpv, e),
                 noiselevel=-1,
                 level=logging.ERROR,
@@ -6403,7 +6409,7 @@ class depgraph:
             pkg = show_req_use
             output_cpv = pkg.cpv + _repo_separator + pkg.repo
             writemsg(
-                "\n!!! "
+                "\n!!!! "
                 + colorize("BAD", "The ebuild selected to satisfy ")
                 + colorize("INFORM", xinfo)
                 + colorize("BAD", " has unmet requirements.")
@@ -6447,7 +6453,7 @@ class depgraph:
                 noiselevel=-1,
             )
             writemsg(
-                "!!! One of the following packages is required to complete your request:\n",
+                "!!!! One of the following packages is required to complete your request:\n",
                 noiselevel=-1,
             )
             for pkg, mreasons in show_missing_use:
@@ -6464,7 +6470,7 @@ class depgraph:
 
         elif masked_packages:
             writemsg(
-                "\n!!! "
+                "\n!!!! "
                 + colorize("BAD", "All ebuilds that could satisfy ")
                 + colorize("INFORM", xinfo)
                 + colorize("BAD", " have been masked.")
@@ -6472,7 +6478,7 @@ class depgraph:
                 noiselevel=-1,
             )
             writemsg(
-                "!!! One of the following masked packages is required to complete your request:\n",
+                "!!!! One of the following masked packages is required to complete your request:\n",
                 noiselevel=-1,
             )
             have_eapi_mask = show_masked_packages(masked_packages)
@@ -8978,7 +8984,7 @@ class depgraph:
                 )
             except portage.exception.InvalidDependString as e:
                 portage.writemsg(
-                    "!!! Invalid RDEPEND in "
+                    "!!!! Invalid RDEPEND in "
                     + "'%svar/db/pkg/%s/RDEPEND': %s\n"
                     % (running_root, running_portage.cpv, e),
                     noiselevel=-1,
@@ -9385,7 +9391,7 @@ class depgraph:
                             )
                         except portage.exception.InvalidDependString as e:
                             portage.writemsg(
-                                "!!! Invalid PROVIDE in "
+                                "!!!! Invalid PROVIDE in "
                                 + "'%svar/db/pkg/%s/PROVIDE': %s\n"
                                 % (task.root, task.cpv, e),
                                 noiselevel=-1,
@@ -9423,7 +9429,7 @@ class depgraph:
                                 skip = True
                         except portage.exception.InvalidDependString as e:
                             portage.writemsg(
-                                "!!! Invalid PROVIDE in "
+                                "!!!! Invalid PROVIDE in "
                                 + "'%svar/db/pkg/%s/PROVIDE': %s\n"
                                 % (task.root, task.cpv, e),
                                 noiselevel=-1,
@@ -9465,7 +9471,7 @@ class depgraph:
                                     break
                         except portage.exception.InvalidDependString as e:
                             portage.writemsg(
-                                "!!! Invalid PROVIDE in "
+                                "!!!! Invalid PROVIDE in "
                                 + "'%svar/db/pkg/%s/PROVIDE': %s\n"
                                 % (task.root, task.cpv, e),
                                 noiselevel=-1,
@@ -10276,7 +10282,7 @@ class depgraph:
             for (abs_user_config, f), path in file_to_write_to.items():
                 if path is None:
                     problems.append(
-                        "!!! No file to write for '%s'\n"
+                        "!!!! No file to write for '%s'\n"
                         % os.path.join(abs_user_config, f)
                     )
 
@@ -10353,7 +10359,7 @@ class depgraph:
                     file_contents = []
                 else:
                     problems.append(
-                        "!!! Failed to read '%s': %s\n" % (file_to_write_to, e)
+                        "!!!! Failed to read '%s': %s\n" % (file_to_write_to, e)
                     )
             if file_contents is not None:
                 file_contents.extend(changes)
@@ -10370,7 +10376,7 @@ class depgraph:
                 try:
                     write_atomic(file_to_write_to, "".join(file_contents))
                 except PortageException:
-                    problems.append("!!! Failed to write '%s'\n" % file_to_write_to)
+                    problems.append("!!!! Failed to write '%s'\n" % file_to_write_to)
 
         if not quiet and (p_mask_change_msg or masked_by_missing_keywords):
             msg = [
@@ -10522,23 +10528,23 @@ class depgraph:
 
             if world_problems:
                 writemsg(
-                    "\n!!! Problems have been " + "detected with your world file\n",
+                    "\n!!!! Problems have been " + "detected with your world file\n",
                     noiselevel=-1,
                 )
                 writemsg(
-                    "!!! Please run " + green("emaint --check world") + "\n\n",
+                    "!!!! Please run " + green("emaint --check world") + "\n\n",
                     noiselevel=-1,
                 )
 
         if self._dynamic_config._missing_args:
             writemsg(
                 "\n"
-                + colorize("BAD", "!!!")
+                + colorize("BAD", "!!!!")
                 + " Ebuilds for the following packages are either all\n",
                 noiselevel=-1,
             )
             writemsg(
-                colorize("BAD", "!!!") + " masked or don't exist:\n", noiselevel=-1
+                colorize("BAD", "!!!!") + " masked or don't exist:\n", noiselevel=-1
             )
             writemsg(
                 " ".join(str(atom) for arg, atom in self._dynamic_config._missing_args)
@@ -10604,7 +10610,7 @@ class depgraph:
         if masked_packages:
             writemsg(
                 "\n"
-                + colorize("BAD", "!!!")
+                + colorize("BAD", "!!!!")
                 + " The following updates are masked by LICENSE changes:\n",
                 noiselevel=-1,
             )
@@ -10625,7 +10631,7 @@ class depgraph:
         if masked_packages:
             writemsg(
                 "\n"
-                + colorize("BAD", "!!!")
+                + colorize("BAD", "!!!!")
                 + " The following installed packages are masked:\n",
                 noiselevel=-1,
             )
@@ -10639,25 +10645,27 @@ class depgraph:
         if self._dynamic_config._buildpkgonly_deps_unsatisfied:
             self._show_merge_list()
             writemsg(
-                "\n!!! --buildpkgonly requires all " "dependencies to be merged.\n",
+                "\n!!!! --buildpkgonly requires all " "dependencies to be merged.\n",
                 noiselevel=-1,
             )
             writemsg(
-                "!!! Cannot merge requested packages. " "Merge deps and try again.\n\n",
+                "!!!! Cannot merge requested packages. "
+                "Merge deps and try again.\n\n",
                 noiselevel=-1,
             )
 
         if self._dynamic_config._quickpkg_direct_deps_unsatisfied:
             self._show_merge_list()
             writemsg(
-                "\n!!! --quickpkg-direct requires all "
+                "\n!!!! --quickpkg-direct requires all "
                 "dependencies to be merged for root '{}'.\n".format(
                     self._frozen_config._running_root.root
                 ),
                 noiselevel=-1,
             )
             writemsg(
-                "!!! Cannot merge requested packages. " "Merge deps and try again.\n\n",
+                "!!!! Cannot merge requested packages. "
+                "Merge deps and try again.\n\n",
                 noiselevel=-1,
             )
 
@@ -10704,10 +10712,11 @@ class depgraph:
                     added_favorites.add(myfavkey)
             except portage.exception.InvalidDependString as e:
                 writemsg(
-                    "\n\n!!! '%s' has invalid PROVIDE: %s\n" % (x.cpv, e), noiselevel=-1
+                    "\n\n!!!! '%s' has invalid PROVIDE: %s\n" % (x.cpv, e),
+                    noiselevel=-1,
                 )
                 writemsg(
-                    "!!! see '%s'\n\n"
+                    "!!!! see '%s'\n\n"
                     % os.path.join(x.root, portage.VDB_PATH, x.cpv, "PROVIDE"),
                     noiselevel=-1,
                 )
@@ -10753,7 +10762,7 @@ class depgraph:
                     else:
                         filename = "world"
                     writemsg_stdout(
-                        '>>> Recording %s in "%s" favorites file...\n'
+                        '>>>> Recording %s in "%s" favorites file...\n'
                         % (colorize("INFORM", str(a)), filename),
                         noiselevel=-1,
                     )
@@ -11386,11 +11395,11 @@ def ambiguous_package_name(arg, atoms, root_config, spinner, myopts):
 
     if "--quiet" in myopts:
         writemsg(
-            '!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
+            '!!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
             noiselevel=-1,
         )
         writemsg(
-            "!!! one of the following fully-qualified ebuild names instead:\n\n",
+            "!!!! one of the following fully-qualified ebuild names instead:\n\n",
             noiselevel=-1,
         )
         for cp in sorted(set(portage.dep_getkey(atom) for atom in atoms)):
@@ -11413,11 +11422,11 @@ def ambiguous_package_name(arg, atoms, root_config, spinner, myopts):
         s.addCP(cp)
     s.output()
     writemsg(
-        '!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
+        '!!!! The short ebuild name "%s" is ambiguous. Please specify\n' % arg,
         noiselevel=-1,
     )
     writemsg(
-        "!!! one of the above fully-qualified ebuild names instead.\n\n", noiselevel=-1
+        "!!!! one of the above fully-qualified ebuild names instead.\n\n", noiselevel=-1
     )
 
 
diff --git a/lib/_emerge/main.py b/lib/_emerge/main.py
index 34555b26c..e30c59e07 100644
--- a/lib/_emerge/main.py
+++ b/lib/_emerge/main.py
@@ -96,8 +96,8 @@ COWSAY_MOO = r"""
 
 
 def multiple_actions(action1, action2):
-    sys.stderr.write("\n!!! Multiple actions requested... Please choose one only.\n")
-    sys.stderr.write("!!! '%s' or '%s'\n\n" % (action1, action2))
+    sys.stderr.write("\n!!!! Multiple actions requested... Please choose one only.\n")
+    sys.stderr.write("!!!! '%s' or '%s'\n\n" % (action1, action2))
     sys.exit(1)
 
 
@@ -1170,7 +1170,7 @@ def profile_check(trees, myaction):
             "--help, --info, --search, --sync, and --version."
         )
         writemsg_level(
-            "".join("!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
+            "".join("!!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
             level=logging.ERROR,
             noiselevel=-1,
         )
diff --git a/lib/_emerge/post_emerge.py b/lib/_emerge/post_emerge.py
index 019167251..911050250 100644
--- a/lib/_emerge/post_emerge.py
+++ b/lib/_emerge/post_emerge.py
@@ -139,10 +139,10 @@ def post_emerge(myaction, myopts, myfiles, target_root, trees, mtimedb, retval):
     if vardbapi._plib_registry.hasEntries():
         if "--quiet" in myopts:
             print()
-            print(colorize("WARN", "!!!") + " existing preserved libs found")
+            print(colorize("WARN", "!!!!") + " existing preserved libs found")
         else:
             print()
-            print(colorize("WARN", "!!!") + " existing preserved libs:")
+            print(colorize("WARN", "!!!!") + " existing preserved libs:")
             display_preserved_libs(vardbapi, verbose="--verbose" in myopts)
             print(
                 "Use "
diff --git a/lib/_emerge/resolver/output_helpers.py b/lib/_emerge/resolver/output_helpers.py
index f80b79ccf..3f42510cf 100644
--- a/lib/_emerge/resolver/output_helpers.py
+++ b/lib/_emerge/resolver/output_helpers.py
@@ -203,9 +203,9 @@ class _DisplayConfig:
             try:
                 mywidth = int(frozen_config.settings["COLUMNWIDTH"])
             except ValueError as e:
-                writemsg("!!! %s\n" % str(e), noiselevel=-1)
+                writemsg("!!!! %s\n" % str(e), noiselevel=-1)
                 writemsg(
-                    "!!! Unable to parse COLUMNWIDTH='%s'\n"
+                    "!!!! Unable to parse COLUMNWIDTH='%s'\n"
                     % frozen_config.settings["COLUMNWIDTH"],
                     noiselevel=-1,
                 )
diff --git a/lib/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py
index 0b063b5f3..e5def035d 100644
--- a/lib/_emerge/resolver/slot_collision.py
+++ b/lib/_emerge/resolver/slot_collision.py
@@ -250,11 +250,11 @@ class slot_conflict_handler:
         msg = self.conflict_msg
         indent = "  "
         msg.append(
-            "\n!!! Multiple package instances within a single "
+            "\n!!!! Multiple package instances within a single "
             + "package slot have been pulled\n"
         )
         msg.append(
-            "!!! into the dependency graph, resulting" + " in a slot conflict:\n\n"
+            "!!!! into the dependency graph, resulting" + " in a slot conflict:\n\n"
         )
 
         for root, slot_atom, pkgs in self.all_conflicts:
@@ -366,7 +366,7 @@ class slot_conflict_handler:
                                         # above findAtomForPackage call to
                                         # return None unexpectedly.
                                         msg = (
-                                            "\n\n!!! BUG: Detected "
+                                            "\n\n!!!! BUG: Detected "
                                             "USE dep match inconsistency:\n"
                                             "\tppkg: %s\n"
                                             "\tviolated_atom: %s\n"
@@ -729,12 +729,12 @@ class slot_conflict_handler:
 
         if need_rebuild:
             msg.append(
-                "\n!!! The slot conflict(s) shown above involve package(s) which may need to\n"
+                "\n!!!! The slot conflict(s) shown above involve package(s) which may need to\n"
             )
             msg.append(
-                "!!! be rebuilt in order to solve the conflict(s). However, the following\n"
+                "!!!! be rebuilt in order to solve the conflict(s). However, the following\n"
             )
-            msg.append("!!! package(s) cannot be rebuilt for the reason(s) shown:\n\n")
+            msg.append("!!!! package(s) cannot be rebuilt for the reason(s) shown:\n\n")
             for ppkg, reason in need_rebuild.items():
                 msg.append("%s%s: %s\n" % (indent, ppkg, reason))
             msg.append("\n")
@@ -750,8 +750,8 @@ class slot_conflict_handler:
         if self.conflict_is_unspecific and not (
             "--newuse" in self.myopts and "--update" in self.myopts
         ):
-            msg += "!!! Enabling --newuse and --update might solve this conflict.\n"
-            msg += "!!! If not, it might help emerge to give a more specific suggestion.\n\n"
+            msg += "!!!! Enabling --newuse and --update might solve this conflict.\n"
+            msg += "!!!! If not, it might help emerge to give a more specific suggestion.\n\n"
             return msg
 
         solutions = self.solutions
diff --git a/lib/_emerge/show_invalid_depstring_notice.py b/lib/_emerge/show_invalid_depstring_notice.py
index 0b01d157c..7736896f7 100644
--- a/lib/_emerge/show_invalid_depstring_notice.py
+++ b/lib/_emerge/show_invalid_depstring_notice.py
@@ -11,7 +11,7 @@ from portage.util import writemsg_level
 def show_invalid_depstring_notice(parent_node, error_msg):
 
     msg1 = (
-        "\n\n!!! Invalid or corrupt dependency specification: "
+        "\n\n!!!! Invalid or corrupt dependency specification: "
         + "\n\n%s\n\n%s\n\n" % (error_msg, parent_node)
     )
     p_key = parent_node.cpv
diff --git a/lib/_emerge/unmerge.py b/lib/_emerge/unmerge.py
index 81541cb4a..34e1e748b 100644
--- a/lib/_emerge/unmerge.py
+++ b/lib/_emerge/unmerge.py
@@ -129,7 +129,7 @@ def _unmerge_display(
                     candidate_catpkgs.append(x)
                 elif unmerge_action in ["prune", "clean"]:
                     print(
-                        "\n!!! Prune and clean do not accept individual"
+                        "\n!!!! Prune and clean do not accept individual"
                         + " ebuilds as arguments;\n    skipping.\n"
                     )
                     continue
@@ -137,7 +137,7 @@ def _unmerge_display(
                     # it appears that the user is specifying an installed
                     # ebuild and we're in "unmerge" mode, so it's ok.
                     if not os.path.exists(x):
-                        print("\n!!! The path '" + x + "' doesn't exist.\n")
+                        print("\n!!!! The path '" + x + "' doesn't exist.\n")
                         return 1, {}
 
                     absx = os.path.abspath(x)
@@ -154,7 +154,7 @@ def _unmerge_display(
                     sp_vdb_len = len(sp_vdb)
 
                     if not os.path.exists(absx + "/CONTENTS"):
-                        print("!!! Not a valid db dir: " + str(absx))
+                        print("!!!! Not a valid db dir: " + str(absx))
                         return 1, {}
 
                     if sp_absx_len <= sp_vdb_len:
@@ -162,7 +162,9 @@ def _unmerge_display(
                         print(sp_absx)
                         print(absx)
                         print(
-                            "\n!!!", x, "cannot be inside " + vdb_path + "; aborting.\n"
+                            "\n!!!!",
+                            x,
+                            "cannot be inside " + vdb_path + "; aborting.\n",
                         )
                         return 1, {}
 
@@ -171,7 +173,7 @@ def _unmerge_display(
                             print(sp_absx)
                             print(absx)
                             print(
-                                "\n!!!",
+                                "\n!!!!",
                                 x,
                                 "is not inside " + vdb_path + "; aborting.\n",
                             )
@@ -187,14 +189,14 @@ def _unmerge_display(
             writemsg_level(
                 darkgreen(
                     newline
-                    + ">>> Using system located in ROOT tree %s\n" % settings["ROOT"]
+                    + ">>>> Using system located in ROOT tree %s\n" % settings["ROOT"]
                 )
             )
 
         if ("--pretend" in myopts or "--ask" in myopts) and not quiet:
             writemsg_level(
                 darkgreen(
-                    newline + ">>> These are the packages that would be unmerged:\n"
+                    newline + ">>>> These are the packages that would be unmerged:\n"
                 )
             )
 
@@ -211,12 +213,12 @@ def _unmerge_display(
                 mymatch = vartree.dbapi.match(x)
             except portage.exception.AmbiguousPackageName as errpkgs:
                 print(
-                    '\n\n!!! The short ebuild name "'
+                    '\n\n!!!! The short ebuild name "'
                     + x
                     + '" is ambiguous.  Please specify'
                 )
                 print(
-                    "!!! one of the following fully-qualified "
+                    "!!!! one of the following fully-qualified "
                     + "ebuild names instead:\n"
                 )
                 for i in errpkgs[0]:
@@ -314,13 +316,13 @@ def _unmerge_display(
         numselected = len(all_selected)
         if global_unmerge and not numselected:
             portage.writemsg_stdout(
-                "\n>>> No outdated packages were found on your system.\n"
+                "\n>>>> No outdated packages were found on your system.\n"
             )
             return 1, {}
 
         if not numselected:
             portage.writemsg_stdout(
-                "\n>>> No packages selected for removal by " + unmerge_action + "\n"
+                "\n>>>> No packages selected for removal by " + unmerge_action + "\n"
             )
             return 1, {}
     finally:
@@ -456,7 +458,7 @@ def _unmerge_display(
     numselected = len(all_selected)
     if not numselected:
         writemsg_level(
-            "\n>>> No packages selected for removal by " + unmerge_action + "\n"
+            "\n>>>> No packages selected for removal by " + unmerge_action + "\n"
         )
         return 1, {}
 
@@ -512,14 +514,14 @@ def _unmerge_display(
             writemsg_level(
                 colorize(
                     "BAD",
-                    "\n\n!!! " + "%s is part of your system profile.\n" % (cp_info,),
+                    "\n\n!!!! " + "%s is part of your system profile.\n" % (cp_info,),
                 ),
                 level=logging.WARNING,
                 noiselevel=-1,
             )
             writemsg_level(
                 colorize(
-                    "WARN", "!!! Unmerging it may " + "be damaging to your system.\n\n"
+                    "WARN", "!!!! Unmerging it may " + "be damaging to your system.\n\n"
                 ),
                 level=logging.WARNING,
                 noiselevel=-1,
@@ -561,12 +563,12 @@ def _unmerge_display(
     )
 
     writemsg_level(
-        "\n>>> "
+        "\n>>>> "
         + colorize("UNMERGE_WARN", "'Selected'")
         + " packages are slated for removal.\n"
     )
     writemsg_level(
-        ">>> "
+        ">>>> "
         + colorize("GOOD", "'Protected'")
         + " and "
         + colorize("GOOD", "'omitted'")
@@ -633,7 +635,7 @@ def unmerge(
 
     if not vartree.dbapi.writable:
         writemsg_level(
-            "!!! %s\n" % _("Read-only file system: %s") % vartree.dbapi._dbroot,
+            "!!!! %s\n" % _("Read-only file system: %s") % vartree.dbapi._dbroot,
             level=logging.ERROR,
             noiselevel=-1,
         )
@@ -641,7 +643,7 @@ def unmerge(
 
     # the real unmerging begins, after a short delay unless we're raging....
     if not unmerge_action == "rage-clean" and clean_delay and not autoclean:
-        countdown(int(settings["CLEAN_DELAY"]), ">>> Unmerging")
+        countdown(int(settings["CLEAN_DELAY"]), ">>>> Unmerging")
 
     all_selected = set()
     all_selected.update(*[x["selected"] for x in pkgmap])
@@ -653,7 +655,7 @@ def unmerge(
     for x in range(len(pkgmap)):
         for y in pkgmap[x]["selected"]:
             emergelog(xterm_titles, "=== Unmerging... (" + y + ")")
-            message = ">>> Unmerging ({0} of {1}) {2}...\n".format(
+            message = ">>>> Unmerging ({0} of {1}) {2}...\n".format(
                 colorize("MERGE_LIST_PROGRESS", str(curval)),
                 colorize("MERGE_LIST_PROGRESS", str(maxval)),
                 y,
@@ -673,7 +675,7 @@ def unmerge(
             )
 
             if retval != os.EX_OK:
-                emergelog(xterm_titles, " !!! unmerge FAILURE: " + y)
+                emergelog(xterm_titles, " !!!! unmerge FAILURE: " + y)
                 if raise_on_error:
                     raise UninstallFailure(retval)
                 sys.exit(retval)
@@ -688,7 +690,7 @@ def unmerge(
                         sets["selected"].load()
                     sets["selected"].cleanPackage(vartree.dbapi, y)
                     sets["selected"].unlock()
-                emergelog(xterm_titles, " >>> unmerge success: " + y)
+                emergelog(xterm_titles, " >>>> unmerge success: " + y)
 
     if (
         clean_world
diff --git a/lib/portage/__init__.py b/lib/portage/__init__.py
index 13af8da09..02799eba9 100644
--- a/lib/portage/__init__.py
+++ b/lib/portage/__init__.py
@@ -33,20 +33,20 @@ try:
 except ImportError as e:
     sys.stderr.write("\n\n")
     sys.stderr.write(
-        "!!! Failed to complete python imports. These are internal modules for\n"
+        "!!!! Failed to complete python imports. These are internal modules for\n"
     )
     sys.stderr.write(
-        "!!! python and failure here indicates that you have a problem with python\n"
+        "!!!! python and failure here indicates that you have a problem with python\n"
     )
     sys.stderr.write(
-        "!!! itself and thus portage is not able to continue processing.\n\n"
+        "!!!! itself and thus portage is not able to continue processing.\n\n"
     )
 
     sys.stderr.write(
-        "!!! You might consider starting python with verbose flags to see what has\n"
+        "!!!! You might consider starting python with verbose flags to see what has\n"
     )
     sys.stderr.write(
-        "!!! gone wrong. Here is the information we got for this exception:\n"
+        "!!!! gone wrong. Here is the information we got for this exception:\n"
     )
     sys.stderr.write("    " + str(e) + "\n\n")
     raise
@@ -168,21 +168,21 @@ try:
 except ImportError as e:
     sys.stderr.write("\n\n")
     sys.stderr.write(
-        "!!! Failed to complete portage imports. There are internal modules for\n"
+        "!!!! Failed to complete portage imports. There are internal modules for\n"
     )
     sys.stderr.write(
-        "!!! portage and failure here indicates that you have a problem with your\n"
+        "!!!! portage and failure here indicates that you have a problem with your\n"
     )
     sys.stderr.write(
-        "!!! installation of portage. Please try a rescue portage located in the ebuild\n"
+        "!!!! installation of portage. Please try a rescue portage located in the ebuild\n"
     )
     sys.stderr.write(
-        "!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
+        "!!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
     )
     sys.stderr.write(
-        "!!! There is a README.RESCUE file that details the steps required to perform\n"
+        "!!!! There is a README.RESCUE file that details the steps required to perform\n"
     )
-    sys.stderr.write("!!! a recovery of portage.\n")
+    sys.stderr.write("!!!! a recovery of portage.\n")
     sys.stderr.write("    " + str(e) + "\n\n")
     raise
 
@@ -408,7 +408,7 @@ try:
     _selinux_merge = _unicode_module_wrapper(_selinux, encoding=_encodings["merge"])
 except (ImportError, OSError) as e:
     if isinstance(e, OSError):
-        sys.stderr.write("!!! SELinux not loaded: %s\n" % str(e))
+        sys.stderr.write("!!!! SELinux not loaded: %s\n" % str(e))
     del e
     _selinux = None
     selinux = None
diff --git a/lib/portage/_selinux.py b/lib/portage/_selinux.py
index d05d6b8e7..460cbd8e1 100644
--- a/lib/portage/_selinux.py
+++ b/lib/portage/_selinux.py
@@ -98,14 +98,14 @@ def setexec(ctx="\n"):
         if selinux.security_getenforce() == 1:
             raise OSError(msg)
         else:
-            portage.writemsg("!!! %s\n" % msg, noiselevel=-1)
+            portage.writemsg("!!!! %s\n" % msg, noiselevel=-1)
 
     if rc < 0:
         if selinux.security_getenforce() == 1:
             raise OSError(_('Failed setting exec() context "%s".') % ctx)
         else:
             portage.writemsg(
-                "!!! " + _('Failed setting exec() context "%s".') % ctx, noiselevel=-1
+                "!!!! " + _('Failed setting exec() context "%s".') % ctx, noiselevel=-1
             )
 
 
diff --git a/lib/portage/_sets/shell.py b/lib/portage/_sets/shell.py
index 249e1fb05..e82fe031b 100644
--- a/lib/portage/_sets/shell.py
+++ b/lib/portage/_sets/shell.py
@@ -15,7 +15,7 @@ class CommandOutputSet(PackageSet):
     """This class creates a PackageSet from the output of a shell command.
     The shell command should produce one atom per line, that is:
 
-    >>> atom1
+    >>>> atom1
         atom2
         ...
         atomN
diff --git a/lib/portage/binrepo/config.py b/lib/portage/binrepo/config.py
index 8024f24d7..3bbc4651e 100644
--- a/lib/portage/binrepo/config.py
+++ b/lib/portage/binrepo/config.py
@@ -58,7 +58,7 @@ class BinRepoConfigLoader(Mapping):
             parser = self._parse(paths, parser_defaults)
         except ConfigParserError as e:
             writemsg(
-                _("!!! Error while reading binrepo config file: %s\n") % e,
+                _("!!!! Error while reading binrepo config file: %s\n") % e,
                 noiselevel=-1,
             )
             parser = SafeConfigParser(defaults=parser_defaults)
@@ -71,7 +71,7 @@ class BinRepoConfigLoader(Mapping):
             repo = BinRepoConfig(repo_data)
             if repo.sync_uri is None:
                 writemsg(
-                    _("!!! Missing sync-uri setting for binrepo %s\n") % (repo.name,),
+                    _("!!!! Missing sync-uri setting for binrepo %s\n") % (repo.name,),
                     noiselevel=-1,
                 )
                 continue
diff --git a/lib/portage/data.py b/lib/portage/data.py
index 09a4dd079..0e6abdd70 100644
--- a/lib/portage/data.py
+++ b/lib/portage/data.py
@@ -37,7 +37,7 @@ if not lchown:
 
         def lchown(*_args, **_kwargs):
             writemsg(
-                colorize("BAD", "!!!")
+                colorize("BAD", "!!!!")
                 + _(
                     " It seems that os.lchown does not"
                     " exist.  Please rebuild python.\n"
diff --git a/lib/portage/dbapi/__init__.py b/lib/portage/dbapi/__init__.py
index 717ab95d5..449751013 100644
--- a/lib/portage/dbapi/__init__.py
+++ b/lib/portage/dbapi/__init__.py
@@ -375,7 +375,7 @@ class dbapi:
                     noiselevel=-1,
                 )
         else:
-            writemsg("!!! Invalid db entry: %s\n" % mypath, noiselevel=-1)
+            writemsg("!!!! Invalid db entry: %s\n" % mypath, noiselevel=-1)
 
     def update_ents(self, updates, onProgress=None, onUpdate=None):
         """
diff --git a/lib/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py
index 777fc4918..2d1fbbecf 100644
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@ -589,15 +589,15 @@ class binarytree:
 
             if (mynewpkg != myoldpkg) and self.dbapi.cpv_exists(mynewcpv):
                 writemsg(
-                    _("!!! Cannot update binary: Destination exists.\n"), noiselevel=-1
+                    _("!!!! Cannot update binary: Destination exists.\n"), noiselevel=-1
                 )
-                writemsg("!!! " + mycpv + " -> " + mynewcpv + "\n", noiselevel=-1)
+                writemsg("!!!! " + mycpv + " -> " + mynewcpv + "\n", noiselevel=-1)
                 continue
 
             tbz2path = self.getname(mycpv)
             if os.path.exists(tbz2path) and not os.access(tbz2path, os.W_OK):
                 writemsg(
-                    _("!!! Cannot update readonly binary: %s\n") % mycpv, noiselevel=-1
+                    _("!!!! Cannot update readonly binary: %s\n") % mycpv, noiselevel=-1
                 )
                 continue
 
@@ -760,7 +760,7 @@ class binarytree:
                 if not self._binrepos_conf:
                     writemsg(
                         _(
-                            "!!! %s is missing (or PORTAGE_BINHOST is unset), but use is requested.\n"
+                            "!!!! %s is missing (or PORTAGE_BINHOST is unset), but use is requested.\n"
                         )
                         % (config_path,),
                         noiselevel=-1,
@@ -885,7 +885,10 @@ class binarytree:
                             continue
                     if not os.access(full_path, os.R_OK):
                         writemsg(
-                            _("!!! Permission denied to read " "binary package: '%s'\n")
+                            _(
+                                "!!!! Permission denied to read "
+                                "binary package: '%s'\n"
+                            )
                             % full_path,
                             noiselevel=-1,
                         )
@@ -903,7 +906,7 @@ class binarytree:
                     if not mycat or not mypf or not slot:
                         # old-style or corrupt package
                         writemsg(
-                            _("\n!!! Invalid binary package: '%s'\n") % full_path,
+                            _("\n!!!! Invalid binary package: '%s'\n") % full_path,
                             noiselevel=-1,
                         )
                         missing_keys = []
@@ -927,7 +930,7 @@ class binarytree:
                             )
                         )
                         for line in textwrap.wrap("".join(msg), 72):
-                            writemsg("!!! %s\n" % line, noiselevel=-1)
+                            writemsg("!!!! %s\n" % line, noiselevel=-1)
                         self.invalids.append(mypkg)
                         continue
 
@@ -948,7 +951,7 @@ class binarytree:
 
                     if invalid_name:
                         writemsg(
-                            _("\n!!! Binary package name is " "invalid: '%s'\n")
+                            _("\n!!!! Binary package name is " "invalid: '%s'\n")
                             % full_path,
                             noiselevel=-1,
                         )
@@ -959,7 +962,7 @@ class binarytree:
                             build_id = int(pkg_metadata["BUILD_ID"])
                         except ValueError:
                             writemsg(
-                                _("!!! Binary package has " "invalid BUILD_ID: '%s'\n")
+                                _("!!!! Binary package has " "invalid BUILD_ID: '%s'\n")
                                 % full_path,
                                 noiselevel=-1,
                             )
@@ -982,7 +985,7 @@ class binarytree:
                     if not self.dbapi._category_re.match(mycat):
                         writemsg(
                             _(
-                                "!!! Binary package has an "
+                                "!!!! Binary package has an "
                                 "unrecognized category: '%s'\n"
                             )
                             % full_path,
@@ -990,7 +993,7 @@ class binarytree:
                         )
                         writemsg(
                             _(
-                                "!!! '%s' has a category that is not"
+                                "!!!! '%s' has a category that is not"
                                 " listed in %setc/portage/categories\n"
                             )
                             % (mycpv, self.settings["PORTAGE_CONFIGROOT"]),
@@ -1035,7 +1038,7 @@ class binarytree:
                         self._eval_use_flags(mycpv, d)
                     except portage.exception.InvalidDependString:
                         writemsg(
-                            _("!!! Invalid binary package: '%s'\n")
+                            _("!!!! Invalid binary package: '%s'\n")
                             % self.getname(mycpv),
                             noiselevel=-1,
                         )
@@ -1251,7 +1254,7 @@ class binarytree:
                         pkgindex = None
                         writemsg(
                             _(
-                                "\n\n!!! Binhost package index "
+                                "\n\n!!!! Binhost package index "
                                 " has no TIMESTAMP field.\n"
                             ),
                             noiselevel=-1,
@@ -1260,7 +1263,7 @@ class binarytree:
                         if not self._pkgindex_version_supported(rmt_idx):
                             writemsg(
                                 _(
-                                    "\n\n!!! Binhost package index version"
+                                    "\n\n!!!! Binhost package index version"
                                     " is not supported: '%s'\n"
                                 )
                                 % rmt_idx.header.get("VERSION"),
@@ -1281,7 +1284,7 @@ class binarytree:
                             AlarmSignal.unregister()
                     except AlarmSignal:
                         writemsg(
-                            "\n\n!!! %s\n"
+                            "\n\n!!!! %s\n"
                             % _("Timed out while closing connection to binhost"),
                             noiselevel=-1,
                         )
@@ -1299,7 +1302,7 @@ class binarytree:
                 # This includes URLError which is raised for SSL
                 # certificate errors when PEP 476 is supported.
                 writemsg(
-                    _("\n\n!!! Error fetching binhost package" " info from '%s'\n")
+                    _("\n\n!!!! Error fetching binhost package" " info from '%s'\n")
                     % _hide_url_passwd(base_url)
                 )
                 # With Python 2, the EnvironmentError message may
@@ -1309,7 +1312,7 @@ class binarytree:
                     error_msg = str(e)
                 except UnicodeDecodeError as uerror:
                     error_msg = str(uerror.object, encoding="utf_8", errors="replace")
-                writemsg("!!! %s\n\n" % error_msg)
+                writemsg("!!!! %s\n\n" % error_msg)
                 del e
                 pkgindex = None
             if proc is not None:
@@ -1403,7 +1406,7 @@ class binarytree:
                 raise
             del e
             writemsg(
-                _("!!! Binary package does not exist: '%s'\n") % full_path,
+                _("!!!! Binary package does not exist: '%s'\n") % full_path,
                 noiselevel=-1,
             )
             return
@@ -1414,7 +1417,9 @@ class binarytree:
         except portage.exception.InvalidDependString:
             invalid_depend = True
         if invalid_depend or not metadata.get("SLOT"):
-            writemsg(_("!!! Invalid binary package: '%s'\n") % full_path, noiselevel=-1)
+            writemsg(
+                _("!!!! Invalid binary package: '%s'\n") % full_path, noiselevel=-1
+            )
             return
 
         fetched = False
@@ -2008,7 +2013,7 @@ class binarytree:
                 digests["size"] = int(metadata["SIZE"])
             except ValueError:
                 writemsg(
-                    _("!!! Malformed SIZE attribute in remote " "metadata for '%s'\n")
+                    _("!!!! Malformed SIZE attribute in remote " "metadata for '%s'\n")
                     % cpv
                 )
 
diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
index 93f3fee2f..11cff1b3f 100644
--- a/lib/portage/dbapi/porttree.py
+++ b/lib/portage/dbapi/porttree.py
@@ -599,10 +599,10 @@ class portdbapi(dbapi):
             ebuild_hash.mtime
         except FileNotFound:
             writemsg(
-                _("!!! aux_get(): ebuild for " "'%s' does not exist at:\n") % (cpv,),
+                _("!!!! aux_get(): ebuild for " "'%s' does not exist at:\n") % (cpv,),
                 noiselevel=-1,
             )
-            writemsg("!!!            %s\n" % ebuild_path, noiselevel=-1)
+            writemsg("!!!!            %s\n" % ebuild_path, noiselevel=-1)
             raise PortageKeyError(cpv)
 
         # Pull pre-generated metadata from the metadata/cache/
@@ -723,7 +723,7 @@ class portdbapi(dbapi):
 
         if not myebuild:
             writemsg(
-                "!!! aux_get(): %s\n" % _("ebuild not found for '%s'") % mycpv,
+                "!!!! aux_get(): %s\n" % _("ebuild not found for '%s'") % mycpv,
                 noiselevel=1,
             )
             future.set_exception(PortageKeyError(mycpv))
@@ -1161,7 +1161,7 @@ class portdbapi(dbapi):
         if invalid_category and mylist:
             writemsg(
                 _(
-                    "\n!!! '%s' has a category that is not listed in "
+                    "\n!!!! '%s' has a category that is not listed in "
                     "%setc/portage/categories\n"
                 )
                 % (mycp, self.settings["PORTAGE_CONFIGROOT"]),
@@ -1436,10 +1436,10 @@ class portdbapi(dbapi):
                     continue
                 except PortageException as e:
                     writemsg(
-                        "!!! Error: aux_get('%s', %s)\n" % (mycpv, aux_keys),
+                        "!!!! Error: aux_get('%s', %s)\n" % (mycpv, aux_keys),
                         noiselevel=-1,
                     )
-                    writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                    writemsg("!!!! %s\n" % (e,), noiselevel=-1)
                     del e
                     continue
 
diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
index 8ffb23b1c..2f8fbddd1 100644
--- a/lib/portage/dbapi/vartree.py
+++ b/lib/portage/dbapi/vartree.py
@@ -721,7 +721,7 @@ class vardbapi(dbapi):
                 pass
             else:
                 writemsg(
-                    _("!!! Error loading '%s': %s\n") % (self._aux_cache_filename, e),
+                    _("!!!! Error loading '%s': %s\n") % (self._aux_cache_filename, e),
                     noiselevel=-1,
                 )
             del e
@@ -1167,19 +1167,19 @@ class vardbapi(dbapi):
                     counter = int(f.readline().strip())
                 except (OverflowError, ValueError) as e:
                     writemsg(
-                        _("!!! COUNTER file is corrupt: '%s'\n") % self._counter_path,
+                        _("!!!! COUNTER file is corrupt: '%s'\n") % self._counter_path,
                         noiselevel=-1,
                     )
-                    writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                    writemsg("!!!! %s\n" % (e,), noiselevel=-1)
         except EnvironmentError as e:
             # Silently allow ENOENT since files under
             # /var/cache/ are allowed to disappear.
             if e.errno != errno.ENOENT:
                 writemsg(
-                    _("!!! Unable to read COUNTER file: '%s'\n") % self._counter_path,
+                    _("!!!! Unable to read COUNTER file: '%s'\n") % self._counter_path,
                     noiselevel=-1,
                 )
-                writemsg("!!! %s\n" % str(e), noiselevel=-1)
+                writemsg("!!!! %s\n" % str(e), noiselevel=-1)
             del e
 
         if self._cached_counter == counter:
@@ -2100,9 +2100,9 @@ class dblink:
             pkgfiles[path] = data
 
         if errors:
-            writemsg(_("!!! Parse error in '%s'\n") % contents_file, noiselevel=-1)
+            writemsg(_("!!!! Parse error in '%s'\n") % contents_file, noiselevel=-1)
             for pos, e in errors:
-                writemsg(_("!!!   line %d: %s\n") % (pos, e), noiselevel=-1)
+                writemsg(_("!!!!   line %d: %s\n") % (pos, e), noiselevel=-1)
         self.contentscache = pkgfiles
         return pkgfiles
 
@@ -2211,7 +2211,7 @@ class dblink:
                                 continue
                             obj_type = self.getcontents()[contents_key][0]
                             self._display_merge(
-                                _(">>> needed   %s %s\n") % (obj_type, contents_key),
+                                _(">>>> needed   %s %s\n") % (obj_type, contents_key),
                                 noiselevel=-1,
                             )
                         plib_registry.register(
@@ -2401,7 +2401,7 @@ class dblink:
                 retval = self._pre_unmerge_backup(background)
                 if retval != os.EX_OK:
                     showMessage(
-                        _("!!! FAILED prerm: quickpkg: %s\n") % retval,
+                        _("!!!! FAILED prerm: quickpkg: %s\n") % retval,
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -2417,7 +2417,7 @@ class dblink:
                 # Sometimes this happens due to corruption of the EAPI file.
                 failures += 1
                 showMessage(
-                    _("!!! FAILED prerm: %s\n") % os.path.join(self.dbdir, "EAPI"),
+                    _("!!!! FAILED prerm: %s\n") % os.path.join(self.dbdir, "EAPI"),
                     level=logging.ERROR,
                     noiselevel=-1,
                 )
@@ -2438,7 +2438,7 @@ class dblink:
                 if retval != os.EX_OK:
                     failures += 1
                     showMessage(
-                        _("!!! FAILED prerm: %s\n") % retval,
+                        _("!!!! FAILED prerm: %s\n") % retval,
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -2465,7 +2465,7 @@ class dblink:
                 if retval != os.EX_OK:
                     failures += 1
                     showMessage(
-                        _("!!! FAILED postrm: %s\n") % retval,
+                        _("!!!! FAILED postrm: %s\n") % retval,
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -2972,7 +2972,7 @@ class dblink:
                         if e.errno not in ignored_unlink_errnos:
                             raise
                         del e
-                        show_unmerge("!!!", "", file_type, obj)
+                        show_unmerge("!!!!", "", file_type, obj)
                 elif pkgfiles[objkey][0] == "obj":
                     if statobj is None or not stat.S_ISREG(statobj.st_mode):
                         show_unmerge("---", unmerge_desc["!obj"], file_type, obj)
@@ -3137,7 +3137,7 @@ class dblink:
                         if e.errno not in ignored_unlink_errnos:
                             raise
                         del e
-                        show_unmerge("!!!", "", "sym", obj)
+                        show_unmerge("!!!!", "", "sym", obj)
 
             protected_symlinks.clear()
             self._unmerge_dirs(
@@ -3188,7 +3188,7 @@ class dblink:
                             if e.errno not in ignored_unlink_errnos:
                                 raise
                             del e
-                            show_unmerge("!!!", "", "obj", child)
+                            show_unmerge("!!!!", "", "obj", child)
 
             try:
                 parent_name = os.path.dirname(obj)
@@ -3254,7 +3254,7 @@ class dblink:
                             if e.errno not in ignored_unlink_errnos:
                                 raise
                             del e
-                            show_unmerge("!!!", "", "sym", obj)
+                            show_unmerge("!!!!", "", "sym", obj)
                         else:
                             parents.append(os.path.dirname(obj))
 
@@ -3483,7 +3483,7 @@ class dblink:
             self._linkmap_broken = True
             self._display_merge(
                 _(
-                    "!!! Disabling preserve-libs "
+                    "!!!! Disabling preserve-libs "
                     "due to error: Command Not Found: %s\n"
                 )
                 % (e,),
@@ -3658,7 +3658,7 @@ class dblink:
                 # it shouldn't be preserved here.
                 showMessage(
                     _(
-                        "!!! File '%s' will not be preserved "
+                        "!!!! File '%s' will not be preserved "
                         "due to missing contents entry\n"
                     )
                     % (f_abs,),
@@ -3669,7 +3669,7 @@ class dblink:
                 continue
             new_contents[f_abs] = contents_entry
             obj_type = contents_entry[0]
-            showMessage(_(">>> needed    %s %s\n") % (obj_type, f_abs), noiselevel=-1)
+            showMessage(_(">>>> needed    %s %s\n") % (obj_type, f_abs), noiselevel=-1)
             # Add parent directories to contents if necessary.
             parent_dir = os.path.dirname(f_abs)
             while len(parent_dir) > len(root):
@@ -3795,8 +3795,8 @@ class dblink:
                     # registry, but the actual lib it points to is not.
                     self._display_merge(
                         _(
-                            "!!! symlink to lib is preserved, "
-                            "but not the lib itself:\n!!! '%s'\n"
+                            "!!!! symlink to lib is preserved, "
+                            "but not the lib itself:\n!!!! '%s'\n"
                         )
                         % (obj,),
                         level=logging.ERROR,
@@ -4271,7 +4271,7 @@ class dblink:
 
         if not os.path.isdir(srcroot):
             showMessage(
-                _("!!! Directory Not Found: D='%s'\n") % srcroot,
+                _("!!!! Directory Not Found: D='%s'\n") % srcroot,
                 level=logging.ERROR,
                 noiselevel=-1,
             )
@@ -4287,7 +4287,7 @@ class dblink:
         )
         phase.start()
         if phase.wait() != os.EX_OK:
-            showMessage(_("!!! instprep failed\n"), level=logging.ERROR, noiselevel=-1)
+            showMessage(_("!!!! instprep failed\n"), level=logging.ERROR, noiselevel=-1)
             return 1
 
         is_binpkg = self.settings.get("EMERGE_FROM") == "binary"
@@ -4318,7 +4318,7 @@ class dblink:
                     slot = self.settings.get(var_name, "")
                     if not slot.strip():
                         showMessage(
-                            _("!!! SLOT is undefined\n"),
+                            _("!!!! SLOT is undefined\n"),
                             level=logging.ERROR,
                             noiselevel=-1,
                         )
@@ -4920,7 +4920,7 @@ class dblink:
             rval = self._pre_merge_backup(self._installed_instance, downgrade)
             if rval != os.EX_OK:
                 showMessage(
-                    _("!!! FAILED preinst: ") + "quickpkg: %s\n" % rval,
+                    _("!!!! FAILED preinst: ") + "quickpkg: %s\n" % rval,
                     level=logging.ERROR,
                     noiselevel=-1,
                 )
@@ -4928,7 +4928,7 @@ class dblink:
 
         # run preinst script
         showMessage(
-            _(">>> Merging %(cpv)s to %(destroot)s\n")
+            _(">>>> Merging %(cpv)s to %(destroot)s\n")
             % {"cpv": self.mycpv, "destroot": destroot}
         )
         phase = EbuildPhase(
@@ -4943,7 +4943,7 @@ class dblink:
         # XXX: Decide how to handle failures here.
         if a != os.EX_OK:
             showMessage(
-                _("!!! FAILED preinst: ") + str(a) + "\n",
+                _("!!!! FAILED preinst: ") + str(a) + "\n",
                 level=logging.ERROR,
                 noiselevel=-1,
             )
@@ -5058,7 +5058,7 @@ class dblink:
         autoclean = self.settings.get("AUTOCLEAN", "yes") == "yes" or preserve_paths
 
         if autoclean:
-            emerge_log(_(" >>> AUTOCLEAN: %s") % (slot_atom,))
+            emerge_log(_(" >>>> AUTOCLEAN: %s") % (slot_atom,))
 
         others_in_slot.append(self)  # self has just been merged
         for dblnk in list(others_in_slot):
@@ -5066,7 +5066,7 @@ class dblink:
                 continue
             if not (autoclean or dblnk.mycpv == self.mycpv or reinstall_self):
                 continue
-            showMessage(_(">>> Safely unmerging already-installed instance...\n"))
+            showMessage(_(">>>> Safely unmerging already-installed instance...\n"))
             emerge_log(_(" === Unmerging... (%s)") % (dblnk.mycpv,))
             others_in_slot.remove(dblnk)  # dblnk will unmerge itself now
             dblnk._linkmap_broken = self._linkmap_broken
@@ -5083,9 +5083,9 @@ class dblink:
             dblnk.settings.pop("REPLACED_BY_VERSION", None)
 
             if unmerge_rval == os.EX_OK:
-                emerge_log(_(" >>> unmerge success: %s") % (dblnk.mycpv,))
+                emerge_log(_(" >>>> unmerge success: %s") % (dblnk.mycpv,))
             else:
-                emerge_log(_(" !!! unmerge FAILURE: %s") % (dblnk.mycpv,))
+                emerge_log(_(" !!!! unmerge FAILURE: %s") % (dblnk.mycpv,))
 
             self.lockdb()
             try:
@@ -5093,7 +5093,7 @@ class dblink:
                 dblnk.delete()
             finally:
                 self.unlockdb()
-            showMessage(_(">>> Original instance of package unmerged safely.\n"))
+            showMessage(_(">>>> Original instance of package unmerged safely.\n"))
 
         if len(others_in_slot) > 1:
             showMessage(
@@ -5221,7 +5221,7 @@ class dblink:
             phase.start()
             a = phase.wait()
             if a == os.EX_OK:
-                showMessage(_(">>> %s merged.\n") % self.mycpv)
+                showMessage(_(">>>> %s merged.\n") % self.mycpv)
         finally:
             self.settings.pop("PORTAGE_UPDATE_ENV", None)
 
@@ -5533,7 +5533,7 @@ class dblink:
                     mydest_link,
                 )
 
-            zing = "!!!"
+            zing = "!!!!"
             if not moveme:
                 # confmem rejected this update
                 zing = "---"
@@ -5582,7 +5582,7 @@ class dblink:
                     continue
                 # unlinking no longer necessary; "movefile" will overwrite symlinks atomically and correctly
                 if moveme:
-                    zing = ">>>"
+                    zing = ">>>>"
                     mymtime = movefile(
                         mysrc,
                         mydest,
@@ -5625,12 +5625,12 @@ class dblink:
                     )
                 else:
                     showMessage(
-                        _("!!! Failed to move file.\n"),
+                        _("!!!! Failed to move file.\n"),
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
                     showMessage(
-                        "!!! %s -> %s\n" % (mydest, myto),
+                        "!!!! %s -> %s\n" % (mydest, myto),
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -5649,20 +5649,20 @@ class dblink:
                     if not stat.S_ISLNK(mydmode) and not os.access(mydest, os.W_OK):
                         pkgstuff = pkgsplit(self.pkg)
                         writemsg(
-                            _("\n!!! Cannot write to '%s'.\n") % mydest, noiselevel=-1
+                            _("\n!!!! Cannot write to '%s'.\n") % mydest, noiselevel=-1
                         )
                         writemsg(
                             _(
-                                "!!! Please check permissions and directories for broken symlinks.\n"
+                                "!!!! Please check permissions and directories for broken symlinks.\n"
                             )
                         )
                         writemsg(
                             _(
-                                "!!! You may start the merge process again by using ebuild:\n"
+                                "!!!! You may start the merge process again by using ebuild:\n"
                             )
                         )
                         writemsg(
-                            "!!! ebuild "
+                            "!!!! ebuild "
                             + self.settings["PORTDIR"]
                             + "/"
                             + self.cat
@@ -5672,7 +5672,7 @@ class dblink:
                             + self.pkg
                             + ".ebuild merge\n"
                         )
-                        writemsg(_("!!! And finish by running this: env-update\n\n"))
+                        writemsg(_("!!!! And finish by running this: env-update\n\n"))
                         return 1
 
                     if stat.S_ISDIR(mydmode) or (
@@ -5732,7 +5732,7 @@ class dblink:
                             bsd_chflags.lchflags(mydest, dflags)
                         os.chmod(mydest, mystat[0])
                         os.chown(mydest, mystat[4], mystat[5])
-                        showMessage(">>> %s/\n" % mydest)
+                        showMessage(">>>> %s/\n" % mydest)
                 else:
                     try:
                         # destination doesn't exist
@@ -5753,7 +5753,7 @@ class dblink:
                         del e
                     os.chmod(mydest, mystat[0])
                     os.chown(mydest, mystat[4], mystat[5])
-                    showMessage(">>> %s/\n" % mydest)
+                    showMessage(">>>> %s/\n" % mydest)
 
                 try:
                     self._merged_path(mydest, os.lstat(mydest))
@@ -5810,7 +5810,7 @@ class dblink:
                     if mymtime is None:
                         return 1
                     hardlink_candidates.append(mydest)
-                    zing = ">>>"
+                    zing = ">>>>"
 
                     try:
                         self._merged_path(mydest, os.lstat(mydest))
@@ -5829,7 +5829,7 @@ class dblink:
                 showMessage("%s %s\n" % (zing, mydest))
             else:
                 # we are merging a fifo or device node
-                zing = "!!!"
+                zing = "!!!!"
                 if mydmode is None:
                     # destination doesn't exist
                     if (
@@ -5843,7 +5843,7 @@ class dblink:
                         )
                         is not None
                     ):
-                        zing = ">>>"
+                        zing = ">>>>"
 
                         try:
                             self._merged_path(mydest, os.lstat(mydest))
diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
index 3b3577025..727915bbe 100644
--- a/lib/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
@@ -254,9 +254,9 @@ def _get_useflag_re(eapi):
 def cpvequal(cpv1, cpv2):
     """
     Example Usage:
-            >>> from portage.dep import cpvequal
-            >>> cpvequal("sys-apps/portage-2.1","sys-apps/portage-2.1")
-            >>> True
+            >>>> from portage.dep import cpvequal
+            >>>> cpvequal("sys-apps/portage-2.1","sys-apps/portage-2.1")
+            >>>> True
 
     @param cpv1: CategoryPackageVersion (no operators) Example: "sys-apps/portage-2.1"
     @type cpv1: String
@@ -317,7 +317,7 @@ def paren_reduce(mystr, _deprecation_warn=True):
     split the list elements by spaces. All redundant brackets are removed.
 
     Example usage:
-            >>> paren_reduce('foobar foo? ( bar baz )')
+            >>>> paren_reduce('foobar foo? ( bar baz )')
             ['foobar', 'foo?', ['bar', 'baz']]
 
     @param mystr: The string to reduce
@@ -484,8 +484,8 @@ def paren_enclose(mylist, unevaluated_atom=False, opconvert=False):
     @return: The paren enclosed string
 
     Example usage:
-            >>> test = ['foobar','foo',['bar','baz']]
-            >>> paren_enclose(test)
+            >>>> test = ['foobar','foo',['bar','baz']]
+            >>>> paren_enclose(test)
             'foobar foo ( bar baz )'
     """
     mystrparts = []
@@ -989,8 +989,8 @@ def dep_opconvert(deplist):
     list of deps that follows..
 
     Example usage:
-            >>> test = ["blah", "||", ["foo", "bar", "baz"]]
-            >>> dep_opconvert(test)
+            >>>> test = ["blah", "||", ["foo", "bar", "baz"]]
+            >>>> dep_opconvert(test)
             ['blah', ['||', 'foo', 'bar', 'baz']]
 
     @param deplist: A list of deps to format
@@ -1034,7 +1034,7 @@ def flatten(mylist):
     @return: A single list containing only non-list elements.
 
     Example usage:
-            >>> flatten([1, [2, 3, [4]]])
+            >>>> flatten([1, [2, 3, [4]]])
             [1, 2, 3, 4]
     """
     if portage._internal_caller:
@@ -2086,8 +2086,8 @@ def get_operator(mydep):
     Return the operator used in a depstring.
 
     Example usage:
-            >>> from portage.dep import *
-            >>> get_operator(">=test-1.0")
+            >>>> from portage.dep import *
+            >>>> get_operator(">=test-1.0")
             '>='
 
     @param mydep: The dep string to check
@@ -2107,7 +2107,7 @@ def dep_getcpv(mydep):
     Return the category-package-version with any operators/slot specifications stripped off
 
     Example usage:
-            >>> dep_getcpv('>=media-libs/test-3.0')
+            >>>> dep_getcpv('>=media-libs/test-3.0')
             'media-libs/test-3.0'
 
     @param mydep: The depstring
@@ -2126,7 +2126,7 @@ def dep_getslot(mydep):
     Retrieve the slot on a depend.
 
     Example usage:
-            >>> dep_getslot('app-misc/test:3')
+            >>>> dep_getslot('app-misc/test:3')
             '3'
 
     @param mydep: The depstring to retrieve the slot of
@@ -2160,7 +2160,7 @@ def dep_getrepo(mydep):
     @return: The repository name
 
     Example usage:
-            >>> dep_getrepo('app-misc/test::repository')
+            >>>> dep_getrepo('app-misc/test::repository')
             'repository'
     """
     repo = getattr(mydep, "repo", False)
@@ -2213,7 +2213,7 @@ def dep_getusedeps(depend):
     @return: List of use flags ( or [] if no flags exist )
 
     Example usage:
-            >>> dep_getusedeps('app-misc/test:3[foo,-bar]')
+            >>>> dep_getusedeps('app-misc/test:3[foo,-bar]')
             ('foo', '-bar')
     """
     use_list = []
@@ -2276,9 +2276,9 @@ def isvalidatom(
     Check to see if a depend atom is valid
 
     Example usage:
-            >>> isvalidatom('media-libs/test-3.0')
+            >>>> isvalidatom('media-libs/test-3.0')
             False
-            >>> isvalidatom('>=media-libs/test-3.0')
+            >>>> isvalidatom('>=media-libs/test-3.0')
             True
 
     @param atom: The depend atom to check against
@@ -2314,9 +2314,9 @@ def isjustname(mypkg):
     Checks to see if the atom is only the package name (no version parts).
 
     Example usage:
-            >>> isjustname('=media-libs/test-3.0')
+            >>>> isjustname('=media-libs/test-3.0')
             False
-            >>> isjustname('media-libs/test')
+            >>>> isjustname('media-libs/test')
             True
 
     @param mypkg: The package atom to check
@@ -2345,9 +2345,9 @@ def isspecific(mypkg):
     package-version format.
 
     Example usage:
-            >>> isspecific('media-libs/test')
+            >>>> isspecific('media-libs/test')
             False
-            >>> isspecific('=media-libs/test-3.0')
+            >>>> isspecific('=media-libs/test-3.0')
             True
 
     @param mypkg: The package depstring to check against
@@ -2373,7 +2373,7 @@ def dep_getkey(mydep):
     Return the category/package-name of a depstring.
 
     Example usage:
-            >>> dep_getkey('=media-libs/test-3.0')
+            >>>> dep_getkey('=media-libs/test-3.0')
             'media-libs/test'
 
     @param mydep: The depstring to retrieve the category/package-name of
@@ -2538,7 +2538,7 @@ def match_from_list(mydep, candidate_list):
     if ver and rev:
         operator = mydep.operator
         if not operator:
-            writemsg(_("!!! Invalid atom: %s\n") % mydep, noiselevel=-1)
+            writemsg(_("!!!! Invalid atom: %s\n") % mydep, noiselevel=-1)
             return []
     else:
         operator = None
@@ -3120,7 +3120,7 @@ def extract_affecting_use(mystr, atom, eapi=None):
     @return: Set of use flags affecting given atom
 
     Example usage:
-            >>> extract_affecting_use('sasl? ( dev-libs/cyrus-sasl ) \
+            >>>> extract_affecting_use('sasl? ( dev-libs/cyrus-sasl ) \
                     !minimal? ( cxx? ( dev-libs/cyrus-sasl ) )', 'dev-libs/cyrus-sasl')
             {'cxx', 'minimal', 'sasl'}
     """
diff --git a/lib/portage/elog/__init__.py b/lib/portage/elog/__init__.py
index 48e2a39de..138407719 100644
--- a/lib/portage/elog/__init__.py
+++ b/lib/portage/elog/__init__.py
@@ -195,7 +195,7 @@ def elog_process(cpv, mysettings, phasefilter=None):
             except (ImportError, AttributeError) as e:
                 writemsg(
                     _(
-                        "!!! Error while importing logging modules "
+                        "!!!! Error while importing logging modules "
                         'while loading "mod_%s":\n'
                     )
                     % str(s)
diff --git a/lib/portage/elog/messages.py b/lib/portage/elog/messages.py
index 6a67a45de..ea4e8c736 100644
--- a/lib/portage/elog/messages.py
+++ b/lib/portage/elog/messages.py
@@ -50,7 +50,7 @@ def collect_ebuild_messages(path):
         filename = os.path.join(path, msgfunction)
         if msgfunction not in EBUILD_PHASES:
             writemsg(
-                _("!!! can't process invalid log file: %s\n") % filename, noiselevel=-1
+                _("!!!! can't process invalid log file: %s\n") % filename, noiselevel=-1
             )
             continue
         if not msgfunction in logentries:
@@ -74,7 +74,8 @@ def collect_ebuild_messages(path):
                     raise ValueError(msgtype)
             except ValueError:
                 writemsg(
-                    _("!!! malformed entry in " "log file: '%s': %s\n") % (filename, l),
+                    _("!!!! malformed entry in " "log file: '%s': %s\n")
+                    % (filename, l),
                     noiselevel=-1,
                 )
                 continue
diff --git a/lib/portage/elog/mod_custom.py b/lib/portage/elog/mod_custom.py
index e0ae77e10..37a3e86c4 100644
--- a/lib/portage/elog/mod_custom.py
+++ b/lib/portage/elog/mod_custom.py
@@ -12,7 +12,7 @@ def process(mysettings, key, logentries, fulltext):
 
     if not mysettings.get("PORTAGE_ELOG_COMMAND"):
         raise portage.exception.MissingParameter(
-            "!!! Custom logging requested but PORTAGE_ELOG_COMMAND is not defined"
+            "!!!! Custom logging requested but PORTAGE_ELOG_COMMAND is not defined"
         )
     else:
         mylogcmd = mysettings["PORTAGE_ELOG_COMMAND"]
@@ -21,5 +21,5 @@ def process(mysettings, key, logentries, fulltext):
         retval = portage.process.spawn_bash(mylogcmd)
         if retval != 0:
             raise portage.exception.PortageException(
-                "!!! PORTAGE_ELOG_COMMAND failed with exitcode %d" % retval
+                "!!!! PORTAGE_ELOG_COMMAND failed with exitcode %d" % retval
             )
diff --git a/lib/portage/elog/mod_mail_summary.py b/lib/portage/elog/mod_mail_summary.py
index a695290ef..79f705f8c 100644
--- a/lib/portage/elog/mod_mail_summary.py
+++ b/lib/portage/elog/mod_mail_summary.py
@@ -28,7 +28,7 @@ def process(mysettings, key, logentries, fulltext):
         errors="replace",
     )
     header = _(
-        ">>> Messages generated for package %(pkg)s by process %(pid)d on %(time)s:\n\n"
+        ">>>> Messages generated for package %(pkg)s by process %(pid)d on %(time)s:\n\n"
     ) % {"pkg": key, "pid": portage.getpid(), "time": time_str}
     config_root = mysettings["PORTAGE_CONFIGROOT"]
 
diff --git a/lib/portage/elog/mod_save_summary.py b/lib/portage/elog/mod_save_summary.py
index 939198fdc..75f5097d3 100644
--- a/lib/portage/elog/mod_save_summary.py
+++ b/lib/portage/elog/mod_save_summary.py
@@ -85,7 +85,7 @@ def process(mysettings, key, logentries, fulltext):
     )
     elogfile.write(
         _(
-            ">>> Messages generated by process "
+            ">>>> Messages generated by process "
             "%(pid)d on %(time)s for package %(pkg)s:\n\n"
         )
         % {"pid": portage.getpid(), "time": time_str, "pkg": key}
diff --git a/lib/portage/emaint/modules/binhost/binhost.py b/lib/portage/emaint/modules/binhost/binhost.py
index 9d924f7e1..cd5c4c92a 100644
--- a/lib/portage/emaint/modules/binhost/binhost.py
+++ b/lib/portage/emaint/modules/binhost/binhost.py
@@ -158,7 +158,8 @@ class BinhostHandler:
                         bintree._eval_use_flags(cpv, d)
                     except portage.exception.InvalidDependString:
                         writemsg(
-                            "!!! Invalid binary package: '%s'\n" % bintree.getname(cpv),
+                            "!!!! Invalid binary package: '%s'\n"
+                            % bintree.getname(cpv),
                             noiselevel=-1,
                         )
                     else:
diff --git a/lib/portage/env/loaders.py b/lib/portage/env/loaders.py
index 284c311a1..6c69a1ecf 100644
--- a/lib/portage/env/loaders.py
+++ b/lib/portage/env/loaders.py
@@ -197,10 +197,10 @@ class ItemFileLoader(FileLoader):
     """
     Class to load data from a file full of items one per line
 
-    >>> item1
-    >>> item2
-    >>> item3
-    >>> item1
+    >>>> item1
+    >>>> item2
+    >>>> item3
+    >>>> item1
 
     becomes { 'item1':None, 'item2':None, 'item3':None }
     Note that due to the data store being a dict, duplicates
@@ -235,7 +235,7 @@ class KeyListFileLoader(FileLoader):
     """
     Class to load data from a file full of key [list] tuples
 
-    >>>>key foo1 foo2 foo3
+    >>>>>key foo1 foo2 foo3
     becomes
     {'key':['foo1','foo2','foo3']}
     """
@@ -288,8 +288,8 @@ class KeyValuePairFileLoader(FileLoader):
     """
     Class to load data from a file full of key=value pairs
 
-    >>>>key=value
-    >>>>foo=bar
+    >>>>>key=value
+    >>>>>foo=bar
     becomes:
     {'key':'value',
      'foo':'bar'}
diff --git a/lib/portage/getbinpkg.py b/lib/portage/getbinpkg.py
index 6aa8f1de1..f9e4aaa62 100644
--- a/lib/portage/getbinpkg.py
+++ b/lib/portage/getbinpkg.py
@@ -29,7 +29,7 @@ from urllib.parse import unquote as urllib_parse_unquote
 try:
     import ftplib
 except ImportError as e:
-    sys.stderr.write(colorize("BAD", "!!! CANNOT IMPORT FTPLIB: ") + str(e) + "\n")
+    sys.stderr.write(colorize("BAD", "!!!! CANNOT IMPORT FTPLIB: ") + str(e) + "\n")
 else:
     _all_errors.extend(ftplib.all_errors)
 
@@ -39,7 +39,9 @@ try:
     from http.client import ResponseNotReady as http_client_ResponseNotReady
     from http.client import error as http_client_error
 except ImportError as e:
-    sys.stderr.write(colorize("BAD", "!!! CANNOT IMPORT HTTP.CLIENT: ") + str(e) + "\n")
+    sys.stderr.write(
+        colorize("BAD", "!!!! CANNOT IMPORT HTTP.CLIENT: ") + str(e) + "\n"
+    )
 else:
     _all_errors.append(http_client_error)
 
@@ -635,7 +637,7 @@ def dir_get_metadata(
     except _all_errors as e:
         # ftplib.FTP(host) can raise errors like this:
         #   socket.error: (111, 'Connection refused')
-        sys.stderr.write("!!! %s\n" % (e,))
+        sys.stderr.write("!!!! %s\n" % (e,))
         return {}
 
     out = sys.stdout
@@ -672,8 +674,8 @@ def dir_get_metadata(
         metadata[baseurl]["data"] = {}
 
     if not os.access(cache_path, os.W_OK):
-        sys.stderr.write(_("!!! Unable to write binary metadata to disk!\n"))
-        sys.stderr.write(_("!!! Permission denied: '%s'\n") % cache_path)
+        sys.stderr.write(_("!!!! Unable to write binary metadata to disk!\n"))
+        sys.stderr.write(_("!!!! Permission denied: '%s'\n") % cache_path)
         return metadata[baseurl]["data"]
 
     import portage.exception
@@ -682,9 +684,9 @@ def dir_get_metadata(
         filelist = dir_get_list(baseurl, conn)
     except portage.exception.PortageException as e:
         sys.stderr.write(
-            _("!!! Error connecting to '%s'.\n") % _hide_url_passwd(baseurl)
+            _("!!!! Error connecting to '%s'.\n") % _hide_url_passwd(baseurl)
         )
-        sys.stderr.write("!!! %s\n" % str(e))
+        sys.stderr.write("!!!! %s\n" % str(e))
         del e
         return metadata[baseurl]["data"]
     tbz2list = match_in_array(filelist, suffix=".tbz2")
@@ -728,7 +730,7 @@ def dir_get_metadata(
                         raise
                     except Exception as e:
                         mytempfile.close()
-                        sys.stderr.write(_("!!! Failed to use gzip: ") + str(e) + "\n")
+                        sys.stderr.write(_("!!!! Failed to use gzip: ") + str(e) + "\n")
                         sys.stderr.flush()
                     mytempfile.close()
                 try:
@@ -744,9 +746,9 @@ def dir_get_metadata(
                     raise
                 except Exception as e:
                     sys.stderr.write(
-                        _("!!! Failed to read data from index: ") + str(mfile) + "\n"
+                        _("!!!! Failed to read data from index: ") + str(mfile) + "\n"
                     )
-                    sys.stderr.write("!!! %s" % str(e))
+                    sys.stderr.write("!!!! %s" % str(e))
                     sys.stderr.flush()
             try:
                 metadatafile = open(
@@ -760,8 +762,8 @@ def dir_get_metadata(
             except SystemExit as e:
                 raise
             except Exception as e:
-                sys.stderr.write(_("!!! Failed to write binary metadata to disk!\n"))
-                sys.stderr.write("!!! %s\n" % str(e))
+                sys.stderr.write(_("!!!! Failed to write binary metadata to disk!\n"))
+                sys.stderr.write("!!!! %s\n" % str(e))
                 sys.stderr.flush()
             break
     # We may have metadata... now we run through the tbz2 list and check.
@@ -829,7 +831,7 @@ def dir_get_metadata(
                 metadata[baseurl]["data"][x] = make_metadata_dict(myid)
             elif verbose:
                 sys.stderr.write(
-                    colorize("BAD", _("!!! Failed to retrieve metadata on: "))
+                    colorize("BAD", _("!!!! Failed to retrieve metadata on: "))
                     + str(x)
                     + "\n"
                 )
@@ -871,8 +873,8 @@ def dir_get_metadata(
     except SystemExit as e:
         raise
     except Exception as e:
-        sys.stderr.write(_("!!! Failed to write binary metadata to disk!\n"))
-        sys.stderr.write("!!! " + str(e) + "\n")
+        sys.stderr.write(_("!!!! Failed to write binary metadata to disk!\n"))
+        sys.stderr.write("!!!! " + str(e) + "\n")
         sys.stderr.flush()
 
     if not keepconnection:
diff --git a/lib/portage/locks.py b/lib/portage/locks.py
index 67541a84d..92a3030ea 100644
--- a/lib/portage/locks.py
+++ b/lib/portage/locks.py
@@ -343,7 +343,7 @@ def _lockfile_iteration(
                                     % lockfilename
                                 )
                             writemsg(
-                                "\n!!! %s: %s\n" % (context_desc, e), noiselevel=-1
+                                "\n!!!! %s: %s\n" % (context_desc, e), noiselevel=-1
                             )
 
                         time.sleep(_HARDLINK_POLL_LATENCY)
diff --git a/lib/portage/mail.py b/lib/portage/mail.py
index aa2617b42..b2a647a76 100644
--- a/lib/portage/mail.py
+++ b/lib/portage/mail.py
@@ -102,7 +102,9 @@ def send_mail(mysettings, message):
                 mymailuser, mymailpasswd = myauthdata.split(":")
             except ValueError:
                 print(
-                    _("!!! invalid SMTP AUTH configuration, trying unauthenticated ...")
+                    _(
+                        "!!!! invalid SMTP AUTH configuration, trying unauthenticated ..."
+                    )
                 )
         else:
             myconndata = mymailuri
@@ -122,7 +124,7 @@ def send_mail(mysettings, message):
         if fd.close() != None:
             sys.stderr.write(
                 _(
-                    "!!! %s returned with a non-zero exit code. This generally indicates an error.\n"
+                    "!!!! %s returned with a non-zero exit code. This generally indicates an error.\n"
                 )
                 % mymailhost
             )
@@ -134,7 +136,7 @@ def send_mail(mysettings, message):
                 if not myconn.has_extn("STARTTLS"):
                     raise portage.exception.PortageException(
                         _(
-                            "!!! TLS support requested for logmail but not supported by server"
+                            "!!!! TLS support requested for logmail but not supported by server"
                         )
                     )
                 myconn.starttls()
@@ -149,12 +151,12 @@ def send_mail(mysettings, message):
             myconn.quit()
         except smtplib.SMTPException as e:
             raise portage.exception.PortageException(
-                _("!!! An error occurred while trying to send logmail:\n") + str(e)
+                _("!!!! An error occurred while trying to send logmail:\n") + str(e)
             )
         except socket.error as e:
             raise portage.exception.PortageException(
                 _(
-                    "!!! A network error occurred while trying to send logmail:\n%s\nSure you configured PORTAGE_ELOG_MAILURI correctly?"
+                    "!!!! A network error occurred while trying to send logmail:\n%s\nSure you configured PORTAGE_ELOG_MAILURI correctly?"
                 )
                 % str(e)
             )
diff --git a/lib/portage/manifest.py b/lib/portage/manifest.py
index 0b4fad76c..450f9e494 100644
--- a/lib/portage/manifest.py
+++ b/lib/portage/manifest.py
@@ -447,7 +447,7 @@ class Manifest:
                     # unless this repo is being prepared for distribution
                     # via rsync.
                     writemsg_level(
-                        "!!! utime('%s', (%s, %s)): %s\n"
+                        "!!!! utime('%s', (%s, %s)): %s\n"
                         % (path, max_mtime, max_mtime, e),
                         level=logging.WARNING,
                         noiselevel=-1,
diff --git a/lib/portage/metadata.py b/lib/portage/metadata.py
index 0bd2bcce4..39940e27b 100644
--- a/lib/portage/metadata.py
+++ b/lib/portage/metadata.py
@@ -19,7 +19,7 @@ from portage.util import writemsg_level
 def action_metadata(settings, portdb, myopts, porttrees=None):
     if porttrees is None:
         porttrees = portdb.porttrees
-    portage.writemsg_stdout("\n>>> Updating Portage cache\n")
+    portage.writemsg_stdout("\n>>>> Updating Portage cache\n")
     cachedir = os.path.normpath(settings.depcachedir)
     if cachedir in [
         "/",
@@ -38,12 +38,12 @@ def action_metadata(settings, portdb, myopts, porttrees=None):
         "/var",
     ]:
         print(
-            "!!! PORTAGE_DEPCACHEDIR IS SET TO A PRIMARY "
+            "!!!! PORTAGE_DEPCACHEDIR IS SET TO A PRIMARY "
             + "ROOT DIRECTORY ON YOUR SYSTEM.",
             file=sys.stderr,
         )
         print(
-            "!!! This is ALMOST CERTAINLY NOT what you want: '%s'" % cachedir,
+            "!!!! This is ALMOST CERTAINLY NOT what you want: '%s'" % cachedir,
             file=sys.stderr,
         )
         sys.exit(73)
diff --git a/lib/portage/news.py b/lib/portage/news.py
index ce61f8490..b60d06f13 100644
--- a/lib/portage/news.py
+++ b/lib/portage/news.py
@@ -155,7 +155,7 @@ class NewsManager:
                         itemid, encoding=_encodings["fs"], errors="replace"
                     )
                     writemsg_level(
-                        _("!!! Invalid encoding in news item name: '%s'\n") % itemid,
+                        _("!!!! Invalid encoding in news item name: '%s'\n") % itemid,
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -353,7 +353,9 @@ class NewsItem:
             for lineno, line in invalids:
                 msg.append(_("  line %d: %s") % (lineno, line))
             writemsg_level(
-                "".join("!!! %s\n" % x for x in msg), level=logging.ERROR, noiselevel=-1
+                "".join("!!!! %s\n" % x for x in msg),
+                level=logging.ERROR,
+                noiselevel=-1,
             )
 
         self._parsed = True
diff --git a/lib/portage/package/ebuild/_config/LocationsManager.py b/lib/portage/package/ebuild/_config/LocationsManager.py
index d65aac609..23f87383e 100644
--- a/lib/portage/package/ebuild/_config/LocationsManager.py
+++ b/lib/portage/package/ebuild/_config/LocationsManager.py
@@ -133,7 +133,7 @@ class LocationsManager:
                     # that can be used for backward compatibility with
                     # old software.
                     writemsg(
-                        "!!! %s\n"
+                        "!!!! %s\n"
                         % _("Found 2 make.profile dirs: " "using '%s', ignoring '%s'")
                         % (self.profile_path, deprecated_profile_path),
                         noiselevel=-1,
@@ -162,10 +162,10 @@ class LocationsManager:
             except ParseError as e:
                 if not portage._sync_mode:
                     writemsg(
-                        _("!!! Unable to parse profile: '%s'\n") % self.profile_path,
+                        _("!!!! Unable to parse profile: '%s'\n") % self.profile_path,
                         noiselevel=-1,
                     )
-                    writemsg("!!! ParseError: %s\n" % str(e), noiselevel=-1)
+                    writemsg("!!!! ParseError: %s\n" % str(e), noiselevel=-1)
                 self.profiles = []
                 self.profiles_complex = []
 
@@ -198,7 +198,7 @@ class LocationsManager:
     def _check_var_directory(self, varname, var):
         if not isdir_raise_eaccess(var):
             writemsg(
-                _("!!! Error: %s='%s' is not a directory. " "Please correct this.\n")
+                _("!!!! Error: %s='%s' is not a directory. " "Please correct this.\n")
                 % (varname, var),
                 noiselevel=-1,
             )
@@ -392,7 +392,7 @@ class LocationsManager:
         if self.sysroot != "/" and self.sysroot != self.target_root:
             writemsg(
                 _(
-                    "!!! Error: SYSROOT (currently %s) must "
+                    "!!!! Error: SYSROOT (currently %s) must "
                     "equal / or ROOT (currently %s).\n"
                 )
                 % (self.sysroot, self.target_root),
diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
index 7bf5dd141..bef21f22f 100644
--- a/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
@@ -25,20 +25,20 @@ class ManifestProcess(ForkProcess):
             mf.create(assumeDistHashesAlways=True)
         except FileNotFound as e:
             portage.writemsg(
-                _("!!! File %s doesn't exist, can't update " "Manifest\n") % e,
+                _("!!!! File %s doesn't exist, can't update " "Manifest\n") % e,
                 noiselevel=-1,
             )
             return 1
 
         except PortagePackageException as e:
-            portage.writemsg(("!!! %s\n") % (e,), noiselevel=-1)
+            portage.writemsg(("!!!! %s\n") % (e,), noiselevel=-1)
             return 1
 
         try:
             modified = mf.write(sign=False)
         except PermissionDenied as e:
             portage.writemsg(
-                "!!! %s: %s\n"
+                "!!!! %s: %s\n"
                 % (
                     _("Permission Denied"),
                     e,
diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
index 4599e2d50..be4bd0523 100644
--- a/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
@@ -63,7 +63,7 @@ class ManifestScheduler(AsyncScheduler):
                         disabled_repos.add(repo_config.name)
                         portage.writemsg(
                             _(
-                                ">>> Skipping creating Manifest for %s%s%s; "
+                                ">>>> Skipping creating Manifest for %s%s%s; "
                                 "repository is configured to not use them\n"
                             )
                             % (cp, _repo_separator, repo_config.name),
diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
index df279dab6..f439e155a 100644
--- a/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
@@ -54,7 +54,7 @@ class ManifestTask(CompositeTask):
                     self.fetchlist_dict.result()
                 except InvalidDependString as e:
                     writemsg(
-                        _("!!! %s%s%s: SRC_URI: %s\n")
+                        _("!!!! %s%s%s: SRC_URI: %s\n")
                         % (self.cp, _repo_separator, self.repo_config.name, e),
                         noiselevel=-1,
                     )
@@ -212,7 +212,9 @@ class ManifestTask(CompositeTask):
         try:
             os.rename(*rename_args)
         except OSError as e:
-            writemsg("!!! rename('%s', '%s'): %s\n" % rename_args + (e,), noiselevel=-1)
+            writemsg(
+                "!!!! rename('%s', '%s'): %s\n" % rename_args + (e,), noiselevel=-1
+            )
             try:
                 os.unlink(self._manifest_path + ".asc")
             except OSError:
diff --git a/lib/portage/package/ebuild/config.py b/lib/portage/package/ebuild/config.py
index b4d6862a3..d3e32108f 100644
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -457,7 +457,7 @@ class config:
 
             if make_conf_count == 2:
                 writemsg(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _("Found 2 make.conf files, using both '%s' and '%s'")
                     % tuple(make_conf_paths),
                     noiselevel=-1,
@@ -525,7 +525,7 @@ class config:
                 # that can be used for backward compatibility with
                 # old software.
                 writemsg(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _(
                         "Found obsolete make.globals file: "
                         "'%s', (using '%s' instead)"
@@ -687,7 +687,7 @@ class config:
                         new_ov.append(portage._shell_quote(ov))
                     else:
                         writemsg(
-                            _("!!! Invalid PORTDIR_OVERLAY" " (not a dir): '%s'\n")
+                            _("!!!! Invalid PORTDIR_OVERLAY" " (not a dir): '%s'\n")
                             % ov,
                             noiselevel=-1,
                         )
@@ -1036,7 +1036,7 @@ class config:
                         # TODO: bail out?
                         writemsg(
                             (
-                                _("!!! package.provided not allowed in EAPI %s: ")
+                                _("!!!! package.provided not allowed in EAPI %s: ")
                                 % x.eapi
                             )
                             + x.location
@@ -1151,7 +1151,7 @@ class config:
                 except ValueError:
                     writemsg(
                         _(
-                            "!!! %s='%s' is not a valid integer.  "
+                            "!!!! %s='%s' is not a valid integer.  "
                             "Falling back to %s.\n"
                         )
                         % (var, self[var], default_val),
@@ -1294,10 +1294,10 @@ class config:
                 ensure_dirs(mydir, gid=gid, mode=mode, mask=modemask)
             except PortageException as e:
                 writemsg(
-                    _("!!! Directory initialization failed: '%s'\n") % mydir,
+                    _("!!!! Directory initialization failed: '%s'\n") % mydir,
                     noiselevel=-1,
                 )
-                writemsg("!!! %s\n" % str(e), noiselevel=-1)
+                writemsg("!!!! %s\n" % str(e), noiselevel=-1)
 
     @property
     def _keywords_manager(self):
@@ -1390,7 +1390,7 @@ class config:
                     and group not in ("*", "~*", "**")
                 ):
                     writemsg(
-                        _("!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
+                        _("!!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
                         noiselevel=-1,
                     )
 
@@ -1428,26 +1428,26 @@ class config:
 
             writemsg(
                 _(
-                    "\n\n!!! %s is not a symlink and will probably prevent most merges.\n"
+                    "\n\n!!!! %s is not a symlink and will probably prevent most merges.\n"
                 )
                 % abs_profile_path,
                 noiselevel=-1,
             )
             writemsg(
-                _("!!! It should point into a profile within %s/profiles/\n")
+                _("!!!! It should point into a profile within %s/profiles/\n")
                 % self["PORTDIR"]
             )
             writemsg(
                 _(
-                    "!!! (You can safely ignore this message when syncing. It's harmless.)\n\n\n"
+                    "!!!! (You can safely ignore this message when syncing. It's harmless.)\n\n\n"
                 )
             )
 
         abs_user_virtuals = os.path.join(self["PORTAGE_CONFIGROOT"], USER_VIRTUALS_FILE)
         if os.path.exists(abs_user_virtuals):
-            writemsg("\n!!! /etc/portage/virtuals is deprecated in favor of\n")
-            writemsg("!!! /etc/portage/profile/virtuals. Please move it to\n")
-            writemsg("!!! this new location.\n\n")
+            writemsg("\n!!!! /etc/portage/virtuals is deprecated in favor of\n")
+            writemsg("!!!! /etc/portage/profile/virtuals. Please move it to\n")
+            writemsg("!!!! this new location.\n\n")
 
         if not sandbox_capable and (
             "sandbox" in self.features or "usersandbox" in self.features
@@ -1462,7 +1462,8 @@ class config:
                 # to the user.
                 writemsg(
                     colorize(
-                        "BAD", _("!!! Problem with sandbox" " binary. Disabling...\n\n")
+                        "BAD",
+                        _("!!!! Problem with sandbox" " binary. Disabling...\n\n"),
                     ),
                     noiselevel=-1,
                 )
@@ -1470,7 +1471,7 @@ class config:
         if "fakeroot" in self.features and not fakeroot_capable:
             writemsg(
                 _(
-                    "!!! FEATURES=fakeroot is enabled, but the "
+                    "!!!! FEATURES=fakeroot is enabled, but the "
                     "fakeroot binary is not installed.\n"
                 ),
                 noiselevel=-1,
@@ -1479,7 +1480,7 @@ class config:
         if "webrsync-gpg" in self.features:
             writemsg(
                 _(
-                    "!!! FEATURES=webrsync-gpg is deprecated, see the make.conf(5) man page.\n"
+                    "!!!! FEATURES=webrsync-gpg is deprecated, see the make.conf(5) man page.\n"
                 ),
                 noiselevel=-1,
             )
@@ -1490,7 +1491,7 @@ class config:
             if "userpriv" in self.features:
                 writemsg(
                     _(
-                        "!!! FEATURES=userpriv is enabled, but "
+                        "!!!! FEATURES=userpriv is enabled, but "
                         "os.setgroups is not available.\n"
                     ),
                     noiselevel=-1,
@@ -1500,7 +1501,7 @@ class config:
             if "userfetch" in self.features:
                 writemsg(
                     _(
-                        "!!! FEATURES=userfetch is enabled, but "
+                        "!!!! FEATURES=userfetch is enabled, but "
                         "os.setgroups is not available.\n"
                     ),
                     noiselevel=-1,
@@ -1509,7 +1510,7 @@ class config:
 
             if warning_shown and platform.python_implementation() == "PyPy":
                 writemsg(
-                    _("!!! See https://bugs.pypy.org/issue833 for details.\n"),
+                    _("!!!! See https://bugs.pypy.org/issue833 for details.\n"),
                     noiselevel=-1,
                 )
 
@@ -1519,7 +1520,7 @@ class config:
                 compression = _compressors[binpkg_compression]
             except KeyError as e:
                 writemsg(
-                    "!!! BINPKG_COMPRESS contains invalid or "
+                    "!!!! BINPKG_COMPRESS contains invalid or "
                     "unsupported compression method: %s" % e.args[0],
                     noiselevel=-1,
                 )
@@ -1530,7 +1531,7 @@ class config:
                     )[0]
                 except IndexError as e:
                     writemsg(
-                        "!!! BINPKG_COMPRESS contains invalid or "
+                        "!!!! BINPKG_COMPRESS contains invalid or "
                         "unsupported compression method: %s" % e.args[0],
                         noiselevel=-1,
                     )
@@ -1538,7 +1539,7 @@ class config:
                     if portage.process.find_binary(compression_binary) is None:
                         missing_package = compression["package"]
                         writemsg(
-                            "!!! BINPKG_COMPRESS unsupported %s. "
+                            "!!!! BINPKG_COMPRESS unsupported %s. "
                             "Missing package: %s"
                             % (binpkg_compression, missing_package),
                             noiselevel=-1,
@@ -2231,7 +2232,7 @@ class config:
             )
             if penvconfig is None:
                 writemsg(
-                    "!!! %s references non-existent file: %s\n"
+                    "!!!! %s references non-existent file: %s\n"
                     % (os.path.join(abs_user_config, "package.env"), penvfile),
                     noiselevel=-1,
                 )
@@ -2239,7 +2240,7 @@ class config:
                 for k, v in penvconfig.items():
                     if k in protected_keys or k in non_user_variables:
                         writemsg(
-                            "!!! Illegal variable "
+                            "!!!! Illegal variable "
                             + "'%s' assigned in '%s'\n" % (k, penvfile),
                             noiselevel=-1,
                         )
@@ -2611,7 +2612,7 @@ class config:
                     self._accept_chost_re = re.compile(r"^%s$" % accept_chost[0])
                 except re.error as e:
                     writemsg(
-                        _("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
+                        _("!!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
                         % (accept_chost[0], e),
                         noiselevel=-1,
                     )
@@ -2623,7 +2624,7 @@ class config:
                     )
                 except re.error as e:
                     writemsg(
-                        _("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
+                        _("!!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
                         % (" ".join(accept_chost), e),
                         noiselevel=-1,
                     )
@@ -3236,7 +3237,7 @@ class config:
                 continue
             if not isinstance(myvalue, str):
                 writemsg(
-                    _("!!! Non-string value in config: %s=%s\n") % (x, myvalue),
+                    _("!!!! Non-string value in config: %s=%s\n") % (x, myvalue),
                     noiselevel=-1,
                 )
                 continue
@@ -3337,7 +3338,7 @@ class config:
                     mydict["LC_CTYPE"] = l
                     if check_locale(silent=True, env=mydict):
                         # TODO: output the following only once
-                        # 						writemsg(_("!!! LC_CTYPE unsupported, using %s instead\n")
+                        # 						writemsg(_("!!!! LC_CTYPE unsupported, using %s instead\n")
                         # 								% mydict["LC_CTYPE"])
                         break
                 else:
@@ -3405,7 +3406,7 @@ class config:
                 else:
                     writemsg(
                         _(
-                            "!!! SELinux module not found. Please verify that it was installed.\n"
+                            "!!!! SELinux module not found. Please verify that it was installed.\n"
                         ),
                         noiselevel=-1,
                     )
diff --git a/lib/portage/package/ebuild/deprecated_profile_check.py b/lib/portage/package/ebuild/deprecated_profile_check.py
index 19bea1903..4d96e039a 100644
--- a/lib/portage/package/ebuild/deprecated_profile_check.py
+++ b/lib/portage/package/ebuild/deprecated_profile_check.py
@@ -51,18 +51,22 @@ def deprecated_profile_check(settings=None):
     writemsg(
         colorize(
             "BAD",
-            _("\n!!! Your current profile is " "deprecated and not supported anymore."),
+            _(
+                "\n!!!! Your current profile is "
+                "deprecated and not supported anymore."
+            ),
         )
         + "\n",
         noiselevel=-1,
     )
     writemsg(
-        colorize("BAD", _("!!! Use eselect profile to update your " "profile.")) + "\n",
+        colorize("BAD", _("!!!! Use eselect profile to update your " "profile."))
+        + "\n",
         noiselevel=-1,
     )
     if not dcontent:
         writemsg(
-            colorize("BAD", _("!!! Please refer to the " "Gentoo Upgrading Guide."))
+            colorize("BAD", _("!!!! Please refer to the " "Gentoo Upgrading Guide."))
             + "\n",
             noiselevel=-1,
         )
@@ -70,7 +74,7 @@ def deprecated_profile_check(settings=None):
     newprofile = dcontent[0].rstrip("\n")
     writemsg(
         colorize(
-            "BAD", _("!!! Please upgrade to the " "following profile if possible:")
+            "BAD", _("!!!! Please upgrade to the " "following profile if possible:")
         )
         + "\n\n",
         noiselevel=-1,
diff --git a/lib/portage/package/ebuild/digestcheck.py b/lib/portage/package/ebuild/digestcheck.py
index 3fe64550c..ebf7297fe 100644
--- a/lib/portage/package/ebuild/digestcheck.py
+++ b/lib/portage/package/ebuild/digestcheck.py
@@ -66,24 +66,24 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
                 if mf.allow_missing:
                     continue
                 eout.eend(1)
-                writemsg(_("\n!!! Missing digest for '%s'\n") % (f,), noiselevel=-1)
+                writemsg(_("\n!!!! Missing digest for '%s'\n") % (f,), noiselevel=-1)
                 return 0
             mf.checkFileHashes(ftype, f, hash_filter=hash_filter)
             eout.eend(0)
     except FileNotFound as e:
         eout.eend(1)
         writemsg(
-            _("\n!!! A file listed in the Manifest could not be found: %s\n") % str(e),
+            _("\n!!!! A file listed in the Manifest could not be found: %s\n") % str(e),
             noiselevel=-1,
         )
         return 0
     except DigestException as e:
         eout.eend(1)
-        writemsg(_("\n!!! Digest verification failed:\n"), noiselevel=-1)
-        writemsg("!!! %s\n" % e.value[0], noiselevel=-1)
-        writemsg(_("!!! Reason: %s\n") % e.value[1], noiselevel=-1)
-        writemsg(_("!!! Got: %s\n") % e.value[2], noiselevel=-1)
-        writemsg(_("!!! Expected: %s\n") % e.value[3], noiselevel=-1)
+        writemsg(_("\n!!!! Digest verification failed:\n"), noiselevel=-1)
+        writemsg("!!!! %s\n" % e.value[0], noiselevel=-1)
+        writemsg(_("!!!! Reason: %s\n") % e.value[1], noiselevel=-1)
+        writemsg(_("!!!! Got: %s\n") % e.value[2], noiselevel=-1)
+        writemsg(_("!!!! Expected: %s\n") % e.value[3], noiselevel=-1)
         return 0
     if mf.thin or mf.allow_missing:
         # In this case we ignore any missing digests that
@@ -96,7 +96,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
             pf = f[:-7]
         if pf is not None and not mf.hasFile("EBUILD", f):
             writemsg(
-                _("!!! A file is not listed in the Manifest: '%s'\n")
+                _("!!!! A file is not listed in the Manifest: '%s'\n")
                 % os.path.join(pkgdir, f),
                 noiselevel=-1,
             )
@@ -114,7 +114,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
                 parent, encoding=_encodings["fs"], errors="replace"
             )
             writemsg(
-                _("!!! Path contains invalid " "character(s) for encoding '%s': '%s'")
+                _("!!!! Path contains invalid " "character(s) for encoding '%s': '%s'")
                 % (_encodings["fs"], parent),
                 noiselevel=-1,
             )
@@ -129,7 +129,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
                 d = _unicode_decode(d, encoding=_encodings["fs"], errors="replace")
                 writemsg(
                     _(
-                        "!!! Path contains invalid "
+                        "!!!! Path contains invalid "
                         "character(s) for encoding '%s': '%s'"
                     )
                     % (_encodings["fs"], os.path.join(parent, d)),
@@ -151,7 +151,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
                 f = os.path.join(parent, f)[len(filesdir) + 1 :]
                 writemsg(
                     _(
-                        "!!! File name contains invalid "
+                        "!!!! File name contains invalid "
                         "character(s) for encoding '%s': '%s'"
                     )
                     % (_encodings["fs"], f),
@@ -166,7 +166,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
             file_type = mf.findFile(f)
             if file_type != "AUX" and not f.startswith("digest-"):
                 writemsg(
-                    _("!!! A file is not listed in the Manifest: '%s'\n")
+                    _("!!!! A file is not listed in the Manifest: '%s'\n")
                     % os.path.join(filesdir, f),
                     noiselevel=-1,
                 )
diff --git a/lib/portage/package/ebuild/digestgen.py b/lib/portage/package/ebuild/digestgen.py
index 3a3c92a3a..006aa1cc6 100644
--- a/lib/portage/package/ebuild/digestgen.py
+++ b/lib/portage/package/ebuild/digestgen.py
@@ -56,7 +56,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
                 for myfile in fetchlist_dict[cpv]:
                     distfiles_map.setdefault(myfile, []).append(cpv)
             except InvalidDependString as e:
-                writemsg("!!! %s\n" % str(e), noiselevel=-1)
+                writemsg("!!!! %s\n" % str(e), noiselevel=-1)
                 del e
                 return 0
         mytree = os.path.dirname(os.path.dirname(mysettings["O"]))
@@ -77,7 +77,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
         if not mf.allow_create:
             writemsg_stdout(
                 _(
-                    ">>> Skipping creating Manifest for %s; "
+                    ">>>> Skipping creating Manifest for %s; "
                     "repository is configured to not use them\n"
                 )
                 % mysettings["O"]
@@ -162,7 +162,7 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
                 myebuild = os.path.join(mysettings["O"], catsplit(cpv)[1] + ".ebuild")
                 spawn_nofetch(myportdb, myebuild)
                 writemsg(
-                    _("!!! Fetch failed for %s, can't update Manifest\n") % myfile,
+                    _("!!!! Fetch failed for %s, can't update Manifest\n") % myfile,
                     noiselevel=-1,
                 )
                 if myfile in dist_hashes and st is not None and st.st_size > 0:
@@ -176,17 +176,17 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
                     writemsg(
                         (
                             _(
-                                "!!! If you would like to forcefully replace the existing Manifest entry\n"
-                                "!!! for %s, use the following command:\n"
+                                "!!!! If you would like to forcefully replace the existing Manifest entry\n"
+                                "!!!! for %s, use the following command:\n"
                             )
                             % myfile
                         )
-                        + "!!!    %s\n" % cmd,
+                        + "!!!!    %s\n" % cmd,
                         noiselevel=-1,
                     )
                 return 0
 
-        writemsg_stdout(_(">>> Creating Manifest for %s\n") % mysettings["O"])
+        writemsg_stdout(_(">>>> Creating Manifest for %s\n") % mysettings["O"])
         try:
             mf.create(
                 assumeDistHashesSometimes=True,
@@ -194,17 +194,17 @@ def digestgen(myarchives=None, mysettings=None, myportdb=None):
             )
         except FileNotFound as e:
             writemsg(
-                _("!!! File %s doesn't exist, can't update Manifest\n") % e,
+                _("!!!! File %s doesn't exist, can't update Manifest\n") % e,
                 noiselevel=-1,
             )
             return 0
         except PortagePackageException as e:
-            writemsg(("!!! %s\n") % (e,), noiselevel=-1)
+            writemsg(("!!!! %s\n") % (e,), noiselevel=-1)
             return 0
         try:
             mf.write(sign=False)
         except PermissionDenied as e:
-            writemsg(_("!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
+            writemsg(_("!!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
             return 0
         if "assume-digests" not in mysettings.features:
             distlist = list(mf.fhashdict.get("DIST", {}))
diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py
index 9650a8444..d33f3e622 100644
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -852,12 +852,12 @@ def doebuild(
     if mydo not in validcommands:
         validcommands.sort()
         writemsg(
-            "!!! doebuild: '%s' is not one of the following valid commands:" % mydo,
+            "!!!! doebuild: '%s' is not one of the following valid commands:" % mydo,
             noiselevel=-1,
         )
         for vcount in range(len(validcommands)):
             if vcount % 6 == 0:
-                writemsg("\n!!! ", noiselevel=-1)
+                writemsg("\n!!!! ", noiselevel=-1)
             writemsg(validcommands[vcount].ljust(11), noiselevel=-1)
         writemsg("\n", noiselevel=-1)
         return 1
@@ -880,7 +880,7 @@ def doebuild(
 
     if mydo not in clean_phases and not os.path.exists(myebuild):
         writemsg(
-            "!!! doebuild: %s not found for %s\n" % (myebuild, mydo), noiselevel=-1
+            "!!!! doebuild: %s not found for %s\n" % (myebuild, mydo), noiselevel=-1
         )
         return 1
 
@@ -1035,7 +1035,7 @@ def doebuild(
 
             if returnpid:
                 writemsg(
-                    "!!! doebuild: %s\n"
+                    "!!!! doebuild: %s\n"
                     % _("returnpid is not supported for phase '%s'\n" % mydo),
                     noiselevel=-1,
                 )
@@ -1071,7 +1071,7 @@ def doebuild(
         if mydo == "unmerge":
             if returnpid:
                 writemsg(
-                    "!!! doebuild: %s\n"
+                    "!!!! doebuild: %s\n"
                     % _("returnpid is not supported for phase '%s'\n" % mydo),
                     noiselevel=-1,
                 )
@@ -1116,12 +1116,12 @@ def doebuild(
                     os.path.join(mysettings["PORTAGE_BUILDDIR"], ".unpacked")
                 ):
                     writemsg_stdout(
-                        _(">>> Not marked as unpacked; recreating WORKDIR...\n")
+                        _(">>>> Not marked as unpacked; recreating WORKDIR...\n")
                     )
                     newstuff = True
                 else:
                     for x in alist:
-                        writemsg_stdout(">>> Checking %s's mtime...\n" % x)
+                        writemsg_stdout(">>>> Checking %s's mtime...\n" % x)
                         try:
                             x_st = os.stat(os.path.join(mysettings["DISTDIR"], x))
                         except OSError:
@@ -1131,7 +1131,7 @@ def doebuild(
                         if x_st is not None and x_st.st_mtime > workdir_st.st_mtime:
                             writemsg_stdout(
                                 _(
-                                    ">>> Timestamp of "
+                                    ">>>> Timestamp of "
                                     "%s has changed; recreating WORKDIR...\n"
                                 )
                                 % x
@@ -1159,7 +1159,7 @@ def doebuild(
                             )
                             builddir_lock = None
                 else:
-                    writemsg_stdout(_(">>> WORKDIR is up-to-date, keeping...\n"))
+                    writemsg_stdout(_(">>>> WORKDIR is up-to-date, keeping...\n"))
                     unpacked = True
 
         # Build directory creation isn't required for any of these.
@@ -1293,8 +1293,8 @@ def doebuild(
                 alist = _parse_uri_map(mysettings.mycpv, metadata, use=use)
                 aalist = _parse_uri_map(mysettings.mycpv, metadata)
             except InvalidDependString as e:
-                writemsg("!!! %s\n" % str(e), noiselevel=-1)
-                writemsg(_("!!! Invalid SRC_URI for '%s'.\n") % mycpv, noiselevel=-1)
+                writemsg("!!!! %s\n" % str(e), noiselevel=-1)
+                writemsg(_("!!!! Invalid SRC_URI for '%s'.\n") % mycpv, noiselevel=-1)
                 del e
                 return 1
 
@@ -1383,7 +1383,7 @@ def doebuild(
                 _doebuild_manifest_cache = None
                 digestgen(mysettings=mysettings, myportdb=mydbapi)
         except PermissionDenied as e:
-            writemsg(_("!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
+            writemsg(_("!!!! Permission Denied: %s\n") % (e,), noiselevel=-1)
             if mydo in ("digest", "manifest"):
                 return 1
 
@@ -1491,7 +1491,7 @@ def doebuild(
 
         elif returnpid:
             writemsg(
-                "!!! doebuild: %s\n"
+                "!!!! doebuild: %s\n"
                 % _("returnpid is not supported for phase '%s'\n" % mydo),
                 noiselevel=-1,
             )
@@ -1506,7 +1506,7 @@ def doebuild(
                 os.path.join(mysettings["PORTAGE_BUILDDIR"], ".installed")
             ):
                 writemsg(
-                    _("!!! mydo=qmerge, but the install phase has not been run\n"),
+                    _("!!!! mydo=qmerge, but the install phase has not been run\n"),
                     noiselevel=-1,
                 )
                 return 1
@@ -1563,7 +1563,7 @@ def doebuild(
                 )
 
         else:
-            writemsg_stdout(_("!!! Unknown mydo: %s\n") % mydo, noiselevel=-1)
+            writemsg_stdout(_("!!!! Unknown mydo: %s\n") % mydo, noiselevel=-1)
             return 1
 
         return retval
@@ -2176,13 +2176,13 @@ def spawnebuild(
         if os.path.exists(check_file):
             writemsg_stdout(
                 _(
-                    ">>> It appears that "
+                    ">>>> It appears that "
                     "'%(action)s' has already executed for '%(pkg)s'; skipping.\n"
                 )
                 % {"action": mydo, "pkg": mysettings["PF"]}
             )
             writemsg_stdout(
-                _(">>> Remove '%(file)s' to force %(action)s.\n")
+                _(">>>> Remove '%(file)s' to force %(action)s.\n")
                 % {"file": check_file, "action": mydo}
             )
             return os.EX_OK
@@ -2277,7 +2277,7 @@ def _check_build_log(mysettings, out=None):
     )
     command_not_found_exclude_re = re.compile(r"/configure: line ")
     helper_missing_file = []
-    helper_missing_file_re = re.compile(r"^!!! (do|new).*: .* does not exist$")
+    helper_missing_file_re = re.compile(r"^!!!! (do|new).*: .* does not exist$")
 
     configure_opts_warn = []
     configure_opts_warn_re = re.compile(
diff --git a/lib/portage/package/ebuild/fetch.py b/lib/portage/package/ebuild/fetch.py
index 8c64362c2..ef47c4115 100644
--- a/lib/portage/package/ebuild/fetch.py
+++ b/lib/portage/package/ebuild/fetch.py
@@ -330,11 +330,11 @@ def _check_digests(filename, digests, show_errors=1):
     if not verified_ok:
         if show_errors:
             writemsg(
-                _("!!! Previously fetched" " file: '%s'\n") % filename, noiselevel=-1
+                _("!!!! Previously fetched" " file: '%s'\n") % filename, noiselevel=-1
             )
-            writemsg(_("!!! Reason: %s\n") % reason[0], noiselevel=-1)
+            writemsg(_("!!!! Reason: %s\n") % reason[0], noiselevel=-1)
             writemsg(
-                _("!!! Got:      %s\n" "!!! Expected: %s\n") % (reason[1], reason[2]),
+                _("!!!! Got:      %s\n" "!!! Expected: %s\n") % (reason[1], reason[2]),
                 noiselevel=-1,
             )
         return False
@@ -815,7 +815,7 @@ def fetch(
             # XXX: This is not a good thing, and is temporary at best.
             print(
                 _(
-                    '>>> "mirror" mode desired and "mirror" restriction found; skipping fetch.'
+                    '>>>> "mirror" mode desired and "mirror" restriction found; skipping fetch.'
                 )
             )
             return 1
@@ -834,14 +834,14 @@ def fetch(
     except (ValueError, OverflowError):
         writemsg(
             _(
-                "!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
+                "!!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
                 " contains non-integer value: '%s'\n"
             )
             % mysettings["PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"],
             noiselevel=-1,
         )
         writemsg(
-            _("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
+            _("!!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
             % checksum_failure_max_tries,
             noiselevel=-1,
         )
@@ -849,14 +849,14 @@ def fetch(
     if v < 1:
         writemsg(
             _(
-                "!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
+                "!!!! Variable PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS"
                 " contains value less than 1: '%s'\n"
             )
             % v,
             noiselevel=-1,
         )
         writemsg(
-            _("!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
+            _("!!!! Using PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS " "default value: %s\n")
             % checksum_failure_max_tries,
             noiselevel=-1,
         )
@@ -875,14 +875,14 @@ def fetch(
         if match is None or (match.group(2).upper() not in _size_suffix_map):
             writemsg(
                 _(
-                    "!!! Variable PORTAGE_FETCH_RESUME_MIN_SIZE"
+                    "!!!! Variable PORTAGE_FETCH_RESUME_MIN_SIZE"
                     " contains an unrecognized format: '%s'\n"
                 )
                 % mysettings["PORTAGE_FETCH_RESUME_MIN_SIZE"],
                 noiselevel=-1,
             )
             writemsg(
-                _("!!! Using PORTAGE_FETCH_RESUME_MIN_SIZE " "default value: %s\n")
+                _("!!!! Using PORTAGE_FETCH_RESUME_MIN_SIZE " "default value: %s\n")
                 % fetch_resume_size_default,
                 noiselevel=-1,
             )
@@ -929,7 +929,7 @@ def fetch(
                 colorize(
                     "BAD",
                     _(
-                        "!!! For fetching to a read-only filesystem, "
+                        "!!!! For fetching to a read-only filesystem, "
                         "locking should be turned off.\n"
                     ),
                 ),
@@ -937,7 +937,7 @@ def fetch(
             )
             writemsg(
                 _(
-                    "!!! This can be done by adding -distlocks to "
+                    "!!!! This can be done by adding -distlocks to "
                     "FEATURES in /etc/portage/make.conf\n"
                 ),
                 noiselevel=-1,
@@ -1089,7 +1089,7 @@ def fetch(
                     mirrorname not in custommirrors
                     and mirrorname not in thirdpartymirrors
                 ):
-                    writemsg(_("!!! No known mirror by the name: %s\n") % (mirrorname))
+                    writemsg(_("!!!! No known mirror by the name: %s\n") % (mirrorname))
             else:
                 writemsg(_("Invalid mirror definition in SRC_URI:\n"), noiselevel=-1)
                 writemsg("  %s\n" % (myuri), noiselevel=-1)
@@ -1131,17 +1131,17 @@ def fetch(
             _ensure_distdir(mysettings, mysettings["DISTDIR"])
         except PortageException as e:
             if not os.path.isdir(mysettings["DISTDIR"]):
-                writemsg("!!! %s\n" % str(e), noiselevel=-1)
+                writemsg("!!!! %s\n" % str(e), noiselevel=-1)
                 writemsg(
-                    _("!!! Directory Not Found: DISTDIR='%s'\n")
+                    _("!!!! Directory Not Found: DISTDIR='%s'\n")
                     % mysettings["DISTDIR"],
                     noiselevel=-1,
                 )
-                writemsg(_("!!! Fetching will fail!\n"), noiselevel=-1)
+                writemsg(_("!!!! Fetching will fail!\n"), noiselevel=-1)
 
     if can_fetch and not fetch_to_ro and not os.access(mysettings["DISTDIR"], os.W_OK):
         writemsg(
-            _("!!! No write access to '%s'\n") % mysettings["DISTDIR"], noiselevel=-1
+            _("!!!! No write access to '%s'\n") % mysettings["DISTDIR"], noiselevel=-1
         )
         can_fetch = False
 
@@ -1175,11 +1175,11 @@ def fetch(
                     expected,
                 )
                 writemsg(
-                    _("!!! Fetched file: %s VERIFY FAILED!\n") % myfile, noiselevel=-1
+                    _("!!!! Fetched file: %s VERIFY FAILED!\n") % myfile, noiselevel=-1
                 )
-                writemsg(_("!!! Reason: %s\n") % reason[0], noiselevel=-1)
+                writemsg(_("!!!! Reason: %s\n") % reason[0], noiselevel=-1)
                 writemsg(
-                    _("!!! Got:      %s\n!!! Expected: %s\n") % (reason[1], reason[2]),
+                    _("!!!! Got:      %s\n!!! Expected: %s\n") % (reason[1], reason[2]),
                     noiselevel=-1,
                 )
 
@@ -1217,7 +1217,7 @@ def fetch(
                     vfs_stat = os.statvfs(mysettings["DISTDIR"])
                 except OSError as e:
                     writemsg_level(
-                        "!!! statvfs('%s'): %s\n" % (mysettings["DISTDIR"], e),
+                        "!!!! statvfs('%s'): %s\n" % (mysettings["DISTDIR"], e),
                         noiselevel=-1,
                         level=logging.ERROR,
                     )
@@ -1258,7 +1258,7 @@ def fetch(
                 except TryAgain:
                     writemsg(
                         _(
-                            ">>> File '%s' is already locked by "
+                            ">>>> File '%s' is already locked by "
                             "another fetcher. Continuing...\n"
                         )
                         % myfile,
@@ -1289,7 +1289,7 @@ def fetch(
                         except PortageException as e:
                             if not os.access(myfile_path, os.R_OK):
                                 writemsg(
-                                    _("!!! Failed to adjust permissions:" " %s\n")
+                                    _("!!!! Failed to adjust permissions:" " %s\n")
                                     % str(e),
                                     noiselevel=-1,
                                 )
@@ -1310,9 +1310,9 @@ def fetch(
                     if stat.S_ISDIR(mystat.st_mode):
                         writemsg_level(
                             _(
-                                "!!! Unable to fetch file since "
+                                "!!!! Unable to fetch file since "
                                 "a directory is in the way: \n"
-                                "!!!   %s\n"
+                                "!!!!   %s\n"
                             )
                             % myfile_path,
                             level=logging.ERROR,
@@ -1361,7 +1361,7 @@ def fetch(
                             # it instead of deleting it.
                             writemsg(
                                 _(
-                                    ">>> Renaming distfile with size "
+                                    ">>>> Renaming distfile with size "
                                     "%d (smaller than "
                                     "PORTAGE_FETCH_RESU"
                                     "ME_MIN_SIZE)\n"
@@ -1414,7 +1414,7 @@ def fetch(
                 # the file is not already fetched
                 if not has_space:
                     writemsg(
-                        _("!!! Insufficient space to store %s in %s\n")
+                        _("!!!! Insufficient space to store %s in %s\n")
                         % (myfile, mysettings["DISTDIR"]),
                         noiselevel=-1,
                     )
@@ -1422,7 +1422,7 @@ def fetch(
                     if has_space_superuser:
                         writemsg(
                             _(
-                                "!!! Insufficient privileges to use "
+                                "!!!! Insufficient privileges to use "
                                 "remaining space.\n"
                             ),
                             noiselevel=-1,
@@ -1430,9 +1430,9 @@ def fetch(
                         if userfetch:
                             writemsg(
                                 _(
-                                    '!!! You may set FEATURES="-userfetch"'
+                                    '!!!! You may set FEATURES="-userfetch"'
                                     " in /etc/portage/make.conf in order to fetch with\n"
-                                    "!!! superuser privileges.\n"
+                                    "!!!! superuser privileges.\n"
                                 ),
                                 noiselevel=-1,
                             )
@@ -1471,7 +1471,7 @@ def fetch(
                         except PortageException as e:
                             if not os.access(download_path, os.R_OK):
                                 writemsg(
-                                    _("!!! Failed to adjust permissions:" " %s\n")
+                                    _("!!!! Failed to adjust permissions:" " %s\n")
                                     % (e,),
                                     noiselevel=-1,
                                 )
@@ -1512,15 +1512,15 @@ def fetch(
                             verified_ok, reason = verify_all(download_path, digests)
                             if not verified_ok:
                                 writemsg(
-                                    _("!!! Previously fetched" " file: '%s'\n")
+                                    _("!!!! Previously fetched" " file: '%s'\n")
                                     % myfile,
                                     noiselevel=-1,
                                 )
                                 writemsg(
-                                    _("!!! Reason: %s\n") % reason[0], noiselevel=-1
+                                    _("!!!! Reason: %s\n") % reason[0], noiselevel=-1
                                 )
                                 writemsg(
-                                    _("!!! Got:      %s\n" "!!! Expected: %s\n")
+                                    _("!!!! Got:      %s\n" "!!! Expected: %s\n")
                                     % (reason[1], reason[2]),
                                     noiselevel=-1,
                                 )
@@ -1594,8 +1594,8 @@ def fetch(
                     if fetchcommand is None:
                         writemsg_level(
                             _(
-                                "!!! %s is unset. It should "
-                                "have been defined in\n!!! %s/make.globals.\n"
+                                "!!!! %s is unset. It should "
+                                "have been defined in\n!!!! %s/make.globals.\n"
                             )
                             % (fetchcommand_var, global_config_path),
                             level=logging.ERROR,
@@ -1605,7 +1605,7 @@ def fetch(
                 if "${FILE}" not in fetchcommand:
                     writemsg_level(
                         _(
-                            "!!! %s does not contain the required ${FILE}"
+                            "!!!! %s does not contain the required ${FILE}"
                             " parameter.\n"
                         )
                         % fetchcommand_var,
@@ -1622,8 +1622,8 @@ def fetch(
                     if resumecommand is None:
                         writemsg_level(
                             _(
-                                "!!! %s is unset. It should "
-                                "have been defined in\n!!! %s/make.globals.\n"
+                                "!!!! %s is unset. It should "
+                                "have been defined in\n!!!! %s/make.globals.\n"
                             )
                             % (resumecommand_var, global_config_path),
                             level=logging.ERROR,
@@ -1633,7 +1633,7 @@ def fetch(
                 if "${FILE}" not in resumecommand:
                     writemsg_level(
                         _(
-                            "!!! %s does not contain the required ${FILE}"
+                            "!!!! %s does not contain the required ${FILE}"
                             " parameter.\n"
                         )
                         % resumecommand_var,
@@ -1645,8 +1645,8 @@ def fetch(
                 if missing_file_param:
                     writemsg_level(
                         _(
-                            "!!! Refer to the make.conf(5) man page for "
-                            "information about how to\n!!! correctly specify "
+                            "!!!! Refer to the make.conf(5) man page for "
+                            "information about how to\n!!!! correctly specify "
                             "FETCHCOMMAND and RESUMECOMMAND.\n"
                         ),
                         level=logging.ERROR,
@@ -1667,14 +1667,14 @@ def fetch(
 
                         if mysize == 0:
                             writemsg(
-                                _("!!! File %s isn't fetched but unable to get it.\n")
+                                _("!!!! File %s isn't fetched but unable to get it.\n")
                                 % myfile,
                                 noiselevel=-1,
                             )
                         elif size is None or size > mysize:
                             writemsg(
                                 _(
-                                    "!!! File %s isn't fully fetched, but unable to complete it\n"
+                                    "!!!! File %s isn't fully fetched, but unable to complete it\n"
                                 )
                                 % myfile,
                                 noiselevel=-1,
@@ -1682,7 +1682,7 @@ def fetch(
                         else:
                             writemsg(
                                 _(
-                                    "!!! File %s is incorrect size, "
+                                    "!!!! File %s is incorrect size, "
                                     "but unable to retry.\n"
                                 )
                                 % myfile,
@@ -1705,7 +1705,7 @@ def fetch(
                             if distdir_writable and mystat.st_size < fetch_resume_size:
                                 writemsg(
                                     _(
-                                        ">>> Deleting distfile with size "
+                                        ">>>> Deleting distfile with size "
                                         "%d (smaller than "
                                         "PORTAGE_FETCH_RESU"
                                         "ME_MIN_SIZE)\n"
@@ -1721,14 +1721,16 @@ def fetch(
                                 fetched = 0
                     if fetched == 1:
                         # resume mode:
-                        writemsg(_(">>> Resuming download...\n"))
+                        writemsg(_(">>>> Resuming download...\n"))
                         locfetch = resumecommand
                         command_var = resumecommand_var
                     else:
                         # normal mode:
                         locfetch = fetchcommand
                         command_var = fetchcommand_var
-                    writemsg_stdout(_(">>> Downloading '%s'\n") % _hide_url_passwd(loc))
+                    writemsg_stdout(
+                        _(">>>> Downloading '%s'\n") % _hide_url_passwd(loc)
+                    )
                     variables = {"URI": loc, "FILE": os.path.basename(download_path)}
 
                     try:
@@ -1765,7 +1767,7 @@ def fetch(
                         except PortageException as e:
                             if not os.access(download_path, os.R_OK):
                                 writemsg(
-                                    _("!!! Failed to adjust permissions:" " %s\n")
+                                    _("!!!! Failed to adjust permissions:" " %s\n")
                                     % str(e),
                                     noiselevel=-1,
                                 )
@@ -1802,8 +1804,8 @@ def fetch(
                                 # instead have -O.
                                 writemsg_level(
                                     _(
-                                        "!!! The command specified in the "
-                                        "%s variable appears to have\n!!! "
+                                        "!!!! The command specified in the "
+                                        "%s variable appears to have\n!!!! "
                                         "created a directory instead of a "
                                         "normal file.\n"
                                     )
@@ -1813,9 +1815,9 @@ def fetch(
                                 )
                                 writemsg_level(
                                     _(
-                                        "!!! Refer to the make.conf(5) "
+                                        "!!!! Refer to the make.conf(5) "
                                         "man page for information about how "
-                                        "to\n!!! correctly specify "
+                                        "to\n!!!! correctly specify "
                                         "FETCHCOMMAND and RESUMECOMMAND.\n"
                                     ),
                                     level=logging.ERROR,
@@ -1864,7 +1866,7 @@ def fetch(
                                                 os.unlink(download_path)
                                                 writemsg(
                                                     _(
-                                                        ">>> Deleting invalid distfile. (Improper 404 redirect from server.)\n"
+                                                        ">>>> Deleting invalid distfile. (Improper 404 redirect from server.)\n"
                                                     )
                                                 )
                                                 fetched = 0
@@ -1886,15 +1888,16 @@ def fetch(
                                 verified_ok, reason = verify_all(download_path, digests)
                                 if not verified_ok:
                                     writemsg(
-                                        _("!!! Fetched file: %s VERIFY FAILED!\n")
+                                        _("!!!! Fetched file: %s VERIFY FAILED!\n")
                                         % myfile,
                                         noiselevel=-1,
                                     )
                                     writemsg(
-                                        _("!!! Reason: %s\n") % reason[0], noiselevel=-1
+                                        _("!!!! Reason: %s\n") % reason[0],
+                                        noiselevel=-1,
                                     )
                                     writemsg(
-                                        _("!!! Got:      %s\n!!! Expected: %s\n")
+                                        _("!!!! Got:      %s\n!!! Expected: %s\n")
                                         % (reason[1], reason[2]),
                                         noiselevel=-1,
                                     )
@@ -1976,11 +1979,11 @@ def fetch(
             if restrict_fetch and not restrict_fetch_msg:
                 restrict_fetch_msg = True
                 msg = _(
-                    "\n!!! %s/%s"
+                    "\n!!!! %s/%s"
                     " has fetch restriction turned on.\n"
-                    "!!! This probably means that this "
+                    "!!!! This probably means that this "
                     "ebuild's files must be downloaded\n"
-                    "!!! manually.  See the comments in"
+                    "!!!! manually.  See the comments in"
                     " the ebuild for more information.\n\n"
                 ) % (mysettings["CATEGORY"], mysettings["PF"])
                 writemsg_level(msg, level=logging.ERROR, noiselevel=-1)
@@ -1995,7 +1998,8 @@ def fetch(
                 )
             else:
                 writemsg(
-                    _("!!! Couldn't download '%s'. Aborting.\n") % myfile, noiselevel=-1
+                    _("!!!! Couldn't download '%s'. Aborting.\n") % myfile,
+                    noiselevel=-1,
                 )
 
             if listonly:
diff --git a/lib/portage/package/ebuild/prepare_build_dirs.py b/lib/portage/package/ebuild/prepare_build_dirs.py
index 41de1a3a9..2954accff 100644
--- a/lib/portage/package/ebuild/prepare_build_dirs.py
+++ b/lib/portage/package/ebuild/prepare_build_dirs.py
@@ -279,19 +279,19 @@ def _prepare_features_dirs(mysettings):
             except DirectoryNotFound as e:
                 failure = True
                 writemsg(
-                    _("\n!!! Directory does not exist: '%s'\n") % (e,), noiselevel=-1
+                    _("\n!!!! Directory does not exist: '%s'\n") % (e,), noiselevel=-1
                 )
-                writemsg(_("!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
+                writemsg(_("!!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
 
             except PortageException as e:
                 failure = True
-                writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
+                writemsg("\n!!!! %s\n" % str(e), noiselevel=-1)
                 writemsg(
-                    _("!!! Failed resetting perms on %s='%s'\n")
+                    _("!!!! Failed resetting perms on %s='%s'\n")
                     % (kwargs["basedir_var"], basedir),
                     noiselevel=-1,
                 )
-                writemsg(_("!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
+                writemsg(_("!!!! Disabled FEATURES='%s'\n") % myfeature, noiselevel=-1)
 
             if failure:
                 mysettings.features.remove(myfeature)
@@ -314,13 +314,13 @@ def _prepare_workdir(mysettings):
             workdir_mode = parsed_mode
     except KeyError as e:
         writemsg(
-            _("!!! PORTAGE_WORKDIR_MODE is unset, using %s.\n") % oct(workdir_mode)
+            _("!!!! PORTAGE_WORKDIR_MODE is unset, using %s.\n") % oct(workdir_mode)
         )
     except ValueError as e:
         if len(str(e)) > 0:
             writemsg("%s\n" % e)
         writemsg(
-            _("!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n")
+            _("!!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n")
             % (mysettings["PORTAGE_WORKDIR_MODE"], oct(workdir_mode))
         )
     mysettings["PORTAGE_WORKDIR_MODE"] = oct(workdir_mode).replace("o", "")
@@ -356,13 +356,13 @@ def _prepare_workdir(mysettings):
                     mode=0o2770,
                 )
         except PortageException as e:
-            writemsg("!!! %s\n" % str(e), noiselevel=-1)
+            writemsg("!!!! %s\n" % str(e), noiselevel=-1)
             writemsg(
-                _("!!! Permission issues with PORTAGE_LOGDIR='%s'\n")
+                _("!!!! Permission issues with PORTAGE_LOGDIR='%s'\n")
                 % mysettings["PORTAGE_LOGDIR"],
                 noiselevel=-1,
             )
-            writemsg(_("!!! Disabling logging.\n"), noiselevel=-1)
+            writemsg(_("!!!! Disabling logging.\n"), noiselevel=-1)
             while "PORTAGE_LOGDIR" in mysettings:
                 del mysettings["PORTAGE_LOGDIR"]
 
@@ -409,13 +409,14 @@ def _prepare_workdir(mysettings):
             try:
                 _ensure_log_subdirs(logdir, log_subdir)
             except PortageException as e:
-                writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                writemsg("!!!! %s\n" % (e,), noiselevel=-1)
 
             if os.access(log_subdir, os.W_OK):
                 logdir_subdir_ok = True
             else:
                 writemsg(
-                    "!!! %s: %s\n" % (_("Permission Denied"), log_subdir), noiselevel=-1
+                    "!!!! %s: %s\n" % (_("Permission Denied"), log_subdir),
+                    noiselevel=-1,
                 )
 
     tmpdir_log_path = os.path.join(mysettings["T"], "build.log%s" % compress_log_ext)
diff --git a/lib/portage/repository/config.py b/lib/portage/repository/config.py
index 0b591d94f..0f9ffa5de 100644
--- a/lib/portage/repository/config.py
+++ b/lib/portage/repository/config.py
@@ -291,7 +291,8 @@ class RepoConfig:
                     v = int(v)
                 except (OverflowError, ValueError):
                     writemsg(
-                        _("!!! Invalid %s setting for repo" " %s: %s\n") % (k, name, v),
+                        _("!!!! Invalid %s setting for repo" " %s: %s\n")
+                        % (k, name, v),
                         noiselevel=-1,
                     )
                     v = None
@@ -621,7 +622,7 @@ class RepoConfigLoader:
             # File "/usr/lib/python3.2/shlex.py", line 168, in read_token
             # 	raise ValueError("No closing quotation")
             writemsg(
-                _("!!! Invalid PORTDIR_OVERLAY:" " %s: %s\n") % (e, portdir_overlay),
+                _("!!!! Invalid PORTDIR_OVERLAY:" " %s: %s\n") % (e, portdir_overlay),
                 noiselevel=-1,
             )
             port_ov = []
@@ -724,7 +725,7 @@ class RepoConfigLoader:
 
                     if not portage._sync_mode:
                         writemsg(
-                            _("!!! Invalid PORTDIR_OVERLAY (not a dir): '%s'\n") % ov,
+                            _("!!!! Invalid PORTDIR_OVERLAY (not a dir): '%s'\n") % ov,
                             noiselevel=-1,
                         )
 
@@ -799,7 +800,7 @@ class RepoConfigLoader:
             self._parse(paths, prepos, settings.local_config, default_opts)
         except ConfigParserError as e:
             writemsg(
-                _("!!! Error while reading repo config file: %s\n") % e, noiselevel=-1
+                _("!!!! Error while reading repo config file: %s\n") % e, noiselevel=-1
             )
             # The configparser state is unreliable (prone to quirky
             # exceptions) after it has thrown an error, so use empty
@@ -850,7 +851,7 @@ class RepoConfigLoader:
                     # Skip this warning for repoman (bug #474578).
                     if settings.local_config and paths:
                         writemsg_level(
-                            "!!! %s\n"
+                            "!!!! %s\n"
                             % _(
                                 "Section '%s' in repos.conf is missing location attribute"
                             )
@@ -864,7 +865,7 @@ class RepoConfigLoader:
                 if not portage._sync_mode:
                     if not isdir_raise_eaccess(repo.location):
                         writemsg_level(
-                            "!!! %s\n"
+                            "!!!! %s\n"
                             % _(
                                 "Section '%s' in repos.conf has location attribute set "
                                 "to nonexistent directory: '%s'"
@@ -884,7 +885,7 @@ class RepoConfigLoader:
                     # if repo.missing_repo_name:
                     if repo.missing_repo_name and repo.name != repo_name:
                         writemsg_level(
-                            "!!! %s\n"
+                            "!!!! %s\n"
                             % _(
                                 "Section '%s' in repos.conf refers to repository "
                                 "without repository name set in '%s'"
@@ -898,7 +899,7 @@ class RepoConfigLoader:
 
                     if repo.name != repo_name:
                         writemsg_level(
-                            "!!! %s\n"
+                            "!!!! %s\n"
                             % _(
                                 "Section '%s' in repos.conf has name different "
                                 "from repository name '%s' set inside repository"
@@ -928,7 +929,7 @@ class RepoConfigLoader:
                         continue
                     writemsg_level(
                         _(
-                            "!!! Repository name or alias '%s', "
+                            "!!!! Repository name or alias '%s', "
                             + "defined for repository '%s', overrides "
                             + "existing alias or repository.\n"
                         )
@@ -957,7 +958,7 @@ class RepoConfigLoader:
                 prepos["DEFAULT"].main_repo = None
                 if portdir and not portage._sync_mode:
                     writemsg(
-                        _("!!! main-repo not set in DEFAULT and PORTDIR is empty.\n"),
+                        _("!!!! main-repo not set in DEFAULT and PORTDIR is empty.\n"),
                         noiselevel=-1,
                     )
 
@@ -970,7 +971,7 @@ class RepoConfigLoader:
         if portdir_sync and main_repo is not None:
             writemsg(
                 _(
-                    "!!! SYNC setting found in make.conf.\n    "
+                    "!!!! SYNC setting found in make.conf.\n    "
                     "This setting is Deprecated and no longer used.  "
                     "Please ensure your 'sync-type' and 'sync-uri' are set correctly"
                     " in /etc/portage/repos.conf/gentoo.conf\n"
@@ -1097,13 +1098,13 @@ class RepoConfigLoader:
             ):
                 # TODO: Delete masters code in lib/portage/tests/resolver/ResolverPlayground.py when deleting this warning.
                 writemsg_level(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _("Repository '%s' is missing masters attribute in '%s'")
                     % (
                         repo.name,
                         os.path.join(repo.location, "metadata", "layout.conf"),
                     )
-                    + "!!! %s\n"
+                    + "!!!! %s\n"
                     % _("Set 'masters = %s' in this file for future compatibility")
                     % self.mainRepo().name,
                     level=logging.WARNING,
@@ -1147,14 +1148,14 @@ class RepoConfigLoader:
             if name != "DEFAULT":
                 if r.location is None:
                     writemsg(
-                        _("!!! Location not set for repository %s\n") % name,
+                        _("!!!! Location not set for repository %s\n") % name,
                         noiselevel=-1,
                     )
                 else:
                     if not isdir_raise_eaccess(r.location) and not portage._sync_mode:
                         self.prepos_order.remove(name)
                         writemsg(
-                            _("!!! Invalid Repository Location" " (not a dir): '%s'\n")
+                            _("!!!! Invalid Repository Location" " (not a dir): '%s'\n")
                             % r.location,
                             noiselevel=-1,
                         )
diff --git a/lib/portage/sync/config_checks.py b/lib/portage/sync/config_checks.py
index a73e0dc88..1f270dfcf 100644
--- a/lib/portage/sync/config_checks.py
+++ b/lib/portage/sync/config_checks.py
@@ -18,7 +18,7 @@ from portage.util import writemsg_level
 def check_type(repo, logger, module_names):
     if repo.sync_uri is not None and repo.sync_type is None:
         writemsg_level(
-            "!!! %s\n"
+            "!!!! %s\n"
             % _(
                 "Repository '%s' has sync-uri attribute, but is missing sync-type attribute"
             )
@@ -29,7 +29,7 @@ def check_type(repo, logger, module_names):
         return False
     if repo.sync_type not in module_names + [None]:
         writemsg_level(
-            "!!! %s\n"
+            "!!!! %s\n"
             % _(
                 "Repository '%s' has sync-type attribute set to unsupported value: '%s'"
             )
@@ -38,7 +38,7 @@ def check_type(repo, logger, module_names):
             noiselevel=-1,
         )
         writemsg_level(
-            "!!! %s\n" % _("Installed sync-types are: '%s'") % (str(module_names)),
+            "!!!! %s\n" % _("Installed sync-types are: '%s'") % (str(module_names)),
             level=logger.ERROR,
             noiselevel=-1,
         )
@@ -68,7 +68,7 @@ class CheckSyncConfig:
         """Check the sync_uri setting"""
         if self.repo.sync_uri is None:
             writemsg_level(
-                "!!! %s\n"
+                "!!!! %s\n"
                 % _(
                     "Repository '%s' has sync-type attribute, but is missing sync-uri attribute"
                 )
@@ -81,7 +81,7 @@ class CheckSyncConfig:
         """Check the auto_sync setting"""
         if self.repo.auto_sync is None:
             writemsg_level(
-                "!!! %s\n"
+                "!!!! %s\n"
                 % _("Repository '%s' is missing auto_sync attribute")
                 % self.repo.name,
                 level=self.logger.ERROR,
@@ -89,7 +89,7 @@ class CheckSyncConfig:
             )
         elif self.repo.auto_sync.lower() not in ["yes", "true", "no", "false"]:
             writemsg_level(
-                "!!! %s\n"
+                "!!!! %s\n"
                 % _("Repository '%s' auto_sync attribute must be one of: %s")
                 % (self.repo.name, "{yes, true, no, false}"),
                 level=self.logger.ERROR,
diff --git a/lib/portage/sync/controller.py b/lib/portage/sync/controller.py
index 987aa5481..d7031db9c 100644
--- a/lib/portage/sync/controller.py
+++ b/lib/portage/sync/controller.py
@@ -212,7 +212,7 @@ class SyncManager:
         return succeeded
 
     def pre_sync(self, repo):
-        msg = ">>> Syncing repository '%s' into '%s'..." % (repo.name, repo.location)
+        msg = ">>>> Syncing repository '%s' into '%s'..." % (repo.name, repo.location)
         self.logger(self.xterm_titles, msg)
         writemsg_level(msg + "\n")
         try:
@@ -248,7 +248,7 @@ class SyncManager:
                             pw = pwd.getpwuid(int(username))
                     except (ValueError, KeyError):
                         writemsg(
-                            "!!! User '%s' invalid or does not exist\n" % username,
+                            "!!!! User '%s' invalid or does not exist\n" % username,
                             noiselevel=-1,
                         )
                         return (logname, user, group, home)
@@ -266,7 +266,7 @@ class SyncManager:
                             pw = grp.getgrgid(int(groupname))
                     except (ValueError, KeyError):
                         writemsg(
-                            "!!! Group '%s' invalid or does not exist\n" % groupname,
+                            "!!!! Group '%s' invalid or does not exist\n" % groupname,
                             noiselevel=-1,
                         )
                         return (logname, user, group, home)
diff --git a/lib/portage/sync/modules/cvs/__init__.py b/lib/portage/sync/modules/cvs/__init__.py
index 344a7f847..3d7373272 100644
--- a/lib/portage/sync/modules/cvs/__init__.py
+++ b/lib/portage/sync/modules/cvs/__init__.py
@@ -18,7 +18,7 @@ class CheckCVSConfig(CheckSyncConfig):
     def check_cvs_repo(self):
         if self.repo.module_specific_options.get("sync-cvs-repo") is None:
             writemsg_level(
-                "!!! %s\n"
+                "!!!! %s\n"
                 % _(
                     "Repository '%s' has sync-type=cvs, but is missing sync-cvs-repo attribute"
                 )
diff --git a/lib/portage/sync/modules/cvs/cvs.py b/lib/portage/sync/modules/cvs/cvs.py
index 722f54ab4..07a92d423 100644
--- a/lib/portage/sync/modules/cvs/cvs.py
+++ b/lib/portage/sync/modules/cvs/cvs.py
@@ -45,7 +45,7 @@ class CVSSync(NewBase):
             )
             != os.EX_OK
         ):
-            msg = "!!! cvs checkout error; exiting."
+            msg = "!!!! cvs checkout error; exiting."
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
             return (1, False)
@@ -67,7 +67,7 @@ class CVSSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! cvs update error; exiting."
+            msg = "!!!! cvs update error; exiting."
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
         return (exitcode, False)
diff --git a/lib/portage/sync/modules/git/__init__.py b/lib/portage/sync/modules/git/__init__.py
index ef32a9da0..4d3777936 100644
--- a/lib/portage/sync/modules/git/__init__.py
+++ b/lib/portage/sync/modules/git/__init__.py
@@ -28,7 +28,7 @@ class CheckGitConfig(CheckSyncConfig):
                 d = int(d)
             except ValueError:
                 writemsg_level(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _("%s value is not a number: '%s'")
                     % (attr.replace("_", "-"), d),
                     level=self.logger.ERROR,
@@ -44,7 +44,7 @@ class CheckGitConfig(CheckSyncConfig):
 
         if v not in ("yes", "no", "true", "false"):
             writemsg_level(
-                "!!! %s\n"
+                "!!!! %s\n"
                 % _("sync-git-verify-commit-signature not one of: %s")
                 % ("{yes, no, true, false}"),
                 level=self.logger.ERROR,
diff --git a/lib/portage/sync/modules/git/git.py b/lib/portage/sync/modules/git/git.py
index 98670e1f9..fa92bb657 100644
--- a/lib/portage/sync/modules/git/git.py
+++ b/lib/portage/sync/modules/git/git.py
@@ -107,7 +107,7 @@ class GitSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! git clone error in %s" % self.repo.location
+            msg = "!!!! git clone error in %s" % self.repo.location
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
             return (exitcode, False)
@@ -166,7 +166,7 @@ class GitSync(NewBase):
                 )
             ).rstrip("\n")
         except subprocess.CalledProcessError as e:
-            msg = "!!! git rev-parse error in %s" % self.repo.location
+            msg = "!!!! git rev-parse error in %s" % self.repo.location
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
             return (e.returncode, False)
@@ -187,7 +187,7 @@ class GitSync(NewBase):
                 **self.spawn_kwargs
             )
             if exitcode != os.EX_OK:
-                msg = "!!! git gc error in %s" % self.repo.location
+                msg = "!!!! git gc error in %s" % self.repo.location
                 self.logger(self.xterm_titles, msg)
                 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
                 return (exitcode, False)
@@ -211,7 +211,7 @@ class GitSync(NewBase):
         )
 
         if exitcode != os.EX_OK:
-            msg = "!!! git fetch error in %s" % self.repo.location
+            msg = "!!!! git fetch error in %s" % self.repo.location
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
             return (exitcode, False)
@@ -235,7 +235,7 @@ class GitSync(NewBase):
         )
 
         if exitcode != os.EX_OK:
-            msg = "!!! git merge error in %s" % self.repo.location
+            msg = "!!!! git merge error in %s" % self.repo.location
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
             return (exitcode, False)
@@ -254,7 +254,7 @@ class GitSync(NewBase):
 
         if self.repo.sync_openpgp_key_path is not None and gemato is None:
             writemsg_level(
-                "!!! Verifying against specified key requires gemato-14.5+ installed\n",
+                "!!!! Verifying against specified key requires gemato-14.5+ installed\n",
                 level=logging.ERROR,
                 noiselevel=-1,
             )
@@ -273,7 +273,7 @@ class GitSync(NewBase):
                     self._refresh_keys(openpgp_env)
                 except (GematoException, asyncio.TimeoutError) as e:
                     writemsg_level(
-                        "!!! Verification impossible due to keyring problem:\n%s\n"
+                        "!!!! Verification impossible due to keyring problem:\n%s\n"
                         % (e,),
                         level=logging.ERROR,
                         noiselevel=-1,
diff --git a/lib/portage/sync/modules/mercurial/mercurial.py b/lib/portage/sync/modules/mercurial/mercurial.py
index 486b4fdd6..c410bf4e1 100644
--- a/lib/portage/sync/modules/mercurial/mercurial.py
+++ b/lib/portage/sync/modules/mercurial/mercurial.py
@@ -87,7 +87,7 @@ class MercurialSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! hg clone error in %s" % self.repo.location
+            msg = "!!!! hg clone error in %s" % self.repo.location
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
             return (exitcode, False)
@@ -144,7 +144,7 @@ class MercurialSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! hg pull error in %s" % self.repo.location
+            msg = "!!!! hg pull error in %s" % self.repo.location
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
             return (exitcode, False)
diff --git a/lib/portage/sync/modules/rsync/rsync.py b/lib/portage/sync/modules/rsync/rsync.py
index 5f4cf1aeb..4c7b7c0f4 100644
--- a/lib/portage/sync/modules/rsync/rsync.py
+++ b/lib/portage/sync/modules/rsync/rsync.py
@@ -71,8 +71,8 @@ class RsyncSync(NewBase):
         for vcs_dir in vcs_dirs:
             writemsg_level(
                 (
-                    "!!! %s appears to be under revision "
-                    + "control (contains %s).\n!!! Aborting rsync sync "
+                    "!!!! %s appears to be under revision "
+                    + "control (contains %s).\n!!!! Aborting rsync sync "
                     '(override with "sync-rsync-vcs-ignore = true" in repos.conf).\n'
                 )
                 % (self.repo.location, vcs_dir),
@@ -117,7 +117,7 @@ class RsyncSync(NewBase):
                     raise ValueError(self.verify_jobs)
             except ValueError:
                 writemsg_level(
-                    "!!! sync-rsync-verify-jobs not a positive integer: %s\n"
+                    "!!!! sync-rsync-verify-jobs not a positive integer: %s\n"
                     % (self.verify_jobs,),
                     level=logging.WARNING,
                     noiselevel=-1,
@@ -139,7 +139,7 @@ class RsyncSync(NewBase):
                     raise ValueError(self.max_age)
             except ValueError:
                 writemsg_level(
-                    "!!! sync-rsync-max-age must be a non-negative integer: %s\n"
+                    "!!!! sync-rsync-max-age must be a non-negative integer: %s\n"
                     % (self.max_age,),
                     level=logging.WARNING,
                     noiselevel=-1,
@@ -166,7 +166,7 @@ class RsyncSync(NewBase):
                     self._refresh_keys(openpgp_env)
                 except (GematoException, asyncio.TimeoutError) as e:
                     writemsg_level(
-                        "!!! Manifest verification impossible due to keyring problem:\n%s\n"
+                        "!!!! Manifest verification impossible due to keyring problem:\n%s\n"
                         % (e,),
                         level=logging.ERROR,
                         noiselevel=-1,
@@ -225,7 +225,7 @@ class RsyncSync(NewBase):
                 )[1:5]
             except ValueError:
                 writemsg_level(
-                    "!!! sync-uri is invalid: %s\n" % syncuri,
+                    "!!!! sync-uri is invalid: %s\n" % syncuri,
                     noiselevel=-1,
                     level=logging.ERROR,
                 )
@@ -266,7 +266,7 @@ class RsyncSync(NewBase):
                     )
                 except socket.error as e:
                     writemsg_level(
-                        "!!! getaddrinfo failed for '%s': %s\n"
+                        "!!!! getaddrinfo failed for '%s': %s\n"
                         % (_unicode_decode(hostname), str(e)),
                         noiselevel=-1,
                         level=logging.ERROR,
@@ -334,7 +334,7 @@ class RsyncSync(NewBase):
                     dosyncuri = uris.pop()
                 elif maxretries < 0 or retries > maxretries:
                     writemsg(
-                        "!!! Exhausted addresses for %s\n" % _unicode_decode(hostname),
+                        "!!!! Exhausted addresses for %s\n" % _unicode_decode(hostname),
                         noiselevel=-1,
                     )
                     return (1, False)
@@ -360,18 +360,18 @@ class RsyncSync(NewBase):
                             print()
                             sys.exit(128 + signal.SIGINT)
                     self.logger(
-                        self.xterm_titles, ">>> Starting rsync with " + dosyncuri
+                        self.xterm_titles, ">>>> Starting rsync with " + dosyncuri
                     )
                     if "--quiet" not in opts:
-                        print(">>> Starting rsync with " + dosyncuri + "...")
+                        print(">>>> Starting rsync with " + dosyncuri + "...")
                 else:
                     self.logger(
                         self.xterm_titles,
-                        ">>> Starting retry %d of %d with %s"
+                        ">>>> Starting retry %d of %d with %s"
                         % (retries, effective_maxretries, dosyncuri),
                     )
                     writemsg_stdout(
-                        "\n\n>>> Starting retry %d of %d with %s\n"
+                        "\n\n>>>> Starting retry %d of %d with %s\n"
                         % (retries, effective_maxretries, dosyncuri),
                         noiselevel=-1,
                     )
@@ -390,7 +390,7 @@ class RsyncSync(NewBase):
                 retries = retries + 1
 
                 if maxretries < 0 or retries <= maxretries:
-                    print(">>> Retrying...")
+                    print(">>>> Retrying...")
                 else:
                     # over retries
                     # exit loop
@@ -411,7 +411,7 @@ class RsyncSync(NewBase):
             if exitcode == 0 and self.verify_metamanifest:
                 if gemato is None:
                     writemsg_level(
-                        "!!! Unable to verify: gemato-14.5+ is required\n",
+                        "!!!! Unable to verify: gemato-14.5+ is required\n",
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -469,7 +469,7 @@ class RsyncSync(NewBase):
                             out.eend(0)
                     except GematoException as e:
                         writemsg_level(
-                            "!!! Manifest verification failed:\n%s\n" % (e,),
+                            "!!!! Manifest verification failed:\n%s\n" % (e,),
                             level=logging.ERROR,
                             noiselevel=-1,
                         )
@@ -495,7 +495,7 @@ class RsyncSync(NewBase):
         elif exitcode == SERVER_OUT_OF_DATE:
             exitcode = 1
         elif exitcode == EXCEEDED_MAX_RETRIES:
-            sys.stderr.write(">>> Exceeded PORTAGE_RSYNC_RETRIES: %s\n" % maxretries)
+            sys.stderr.write(">>>> Exceeded PORTAGE_RSYNC_RETRIES: %s\n" % maxretries)
             exitcode = 1
         elif exitcode > 0:
             msg = []
@@ -657,7 +657,7 @@ class RsyncSync(NewBase):
         updatecache_flg = False
         is_synced = False
         if timestamp != 0 and "--quiet" not in opts:
-            print(">>> Checking server timestamp ...")
+            print(">>>> Checking server timestamp ...")
 
         rsynccommand = [self.bin_command] + self.rsync_opts + self.extra_rsync_opts
 
@@ -762,34 +762,34 @@ class RsyncSync(NewBase):
                 local_state_unchanged = True
                 is_synced = True
                 self.logger(
-                    self.xterm_titles, ">>> Cancelling sync -- Already current."
+                    self.xterm_titles, ">>>> Cancelling sync -- Already current."
                 )
                 print()
-                print(">>>")
+                print(">>>>")
                 print(
-                    ">>> Timestamps on the server and in the local repository are the same."
+                    ">>>> Timestamps on the server and in the local repository are the same."
                 )
                 print(
-                    ">>> Cancelling all further sync action. You are already up to date."
+                    ">>>> Cancelling all further sync action. You are already up to date."
                 )
-                print(">>>")
+                print(">>>>")
                 print(
-                    ">>> In order to force sync, remove '%s'."
+                    ">>>> In order to force sync, remove '%s'."
                     % self.servertimestampfile
                 )
-                print(">>>")
+                print(">>>>")
                 print()
             elif (servertimestamp != 0) and (servertimestamp < timestamp):
-                self.logger(self.xterm_titles, ">>> Server out of date: %s" % syncuri)
+                self.logger(self.xterm_titles, ">>>> Server out of date: %s" % syncuri)
                 print()
-                print(">>>")
-                print(">>> SERVER OUT OF DATE: %s" % syncuri)
-                print(">>>")
+                print(">>>>")
+                print(">>>> SERVER OUT OF DATE: %s" % syncuri)
+                print(">>>>")
                 print(
-                    ">>> In order to force sync, remove '%s'."
+                    ">>>> In order to force sync, remove '%s'."
                     % self.servertimestampfile
                 )
-                print(">>>")
+                print(">>>>")
                 print()
                 exitcode = SERVER_OUT_OF_DATE
             elif (servertimestamp == 0) or (servertimestamp > timestamp):
diff --git a/lib/portage/sync/modules/svn/svn.py b/lib/portage/sync/modules/svn/svn.py
index 788e394cd..9a2312337 100644
--- a/lib/portage/sync/modules/svn/svn.py
+++ b/lib/portage/sync/modules/svn/svn.py
@@ -39,7 +39,7 @@ class SVNSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! svn checkout error; exiting."
+            msg = "!!!! svn checkout error; exiting."
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
         return (exitcode, False)
@@ -63,7 +63,7 @@ class SVNSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! svn update error; exiting."
+            msg = "!!!! svn update error; exiting."
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
         return (exitcode, False)
@@ -81,7 +81,7 @@ class SVNSync(NewBase):
             **self.spawn_kwargs
         )
         if exitcode != os.EX_OK:
-            msg = "!!! svn upgrade error; exiting."
+            msg = "!!!! svn upgrade error; exiting."
             self.logger(self.xterm_titles, msg)
             writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR)
         return exitcode
diff --git a/lib/portage/sync/modules/webrsync/webrsync.py b/lib/portage/sync/modules/webrsync/webrsync.py
index 0e2f63472..d427f346f 100644
--- a/lib/portage/sync/modules/webrsync/webrsync.py
+++ b/lib/portage/sync/modules/webrsync/webrsync.py
@@ -70,7 +70,7 @@ class WebRsync(SyncBase):
 
                 if not self.repo.sync_openpgp_key_path:
                     writemsg_level(
-                        "!!! sync-openpgp-key-path is not set\n",
+                        "!!!! sync-openpgp-key-path is not set\n",
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -78,7 +78,7 @@ class WebRsync(SyncBase):
 
                 if not os.path.isfile(self.repo.sync_openpgp_key_path):
                     writemsg_level(
-                        "!!! sync-openpgp-key-path file not found: %s\n"
+                        "!!!! sync-openpgp-key-path file not found: %s\n"
                         % self.repo.sync_openpgp_key_path,
                         level=logging.ERROR,
                         noiselevel=-1,
@@ -87,7 +87,7 @@ class WebRsync(SyncBase):
 
                 if gemato is None:
                     writemsg_level(
-                        "!!! Verifying against specified key requires gemato-14.5+ installed\n",
+                        "!!!! Verifying against specified key requires gemato-14.5+ installed\n",
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -105,7 +105,7 @@ class WebRsync(SyncBase):
                     self.spawn_kwargs["env"]["PORTAGE_TEMP_GPG_DIR"] = openpgp_env.home
                 except (GematoException, asyncio.TimeoutError) as e:
                     writemsg_level(
-                        "!!! Verification impossible due to keyring problem:\n%s\n"
+                        "!!!! Verification impossible due to keyring problem:\n%s\n"
                         % (e,),
                         level=logging.ERROR,
                         noiselevel=-1,
@@ -125,7 +125,7 @@ class WebRsync(SyncBase):
 
             exitcode = portage.process.spawn(webrsync_cmd, **self.spawn_kwargs)
             if exitcode != os.EX_OK:
-                msg = "!!! emerge-webrsync error in %s" % self.repo.location
+                msg = "!!!! emerge-webrsync error in %s" % self.repo.location
                 self.logger(self.xterm_titles, msg)
                 writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
                 return (exitcode, False)
diff --git a/lib/portage/sync/old_tree_timestamp.py b/lib/portage/sync/old_tree_timestamp.py
index 3558a25ad..01fc95d57 100644
--- a/lib/portage/sync/old_tree_timestamp.py
+++ b/lib/portage/sync/old_tree_timestamp.py
@@ -82,7 +82,7 @@ def old_tree_timestamp_warn(portdir, settings):
         warnsync = float(settings.get(var_name, default_warnsync))
     except ValueError:
         writemsg_level(
-            "!!! %s contains non-numeric value: %s\n" % (var_name, settings[var_name]),
+            "!!!! %s contains non-numeric value: %s\n" % (var_name, settings[var_name]),
             level=logging.ERROR,
             noiselevel=-1,
         )
diff --git a/lib/portage/sync/syncbase.py b/lib/portage/sync/syncbase.py
index 94c873e1f..aa33f3312 100644
--- a/lib/portage/sync/syncbase.py
+++ b/lib/portage/sync/syncbase.py
@@ -67,13 +67,13 @@ class SyncBase:
                 % (self.bin_pkg, self._bin_command),
             ]
             for l in msg:
-                writemsg_level("!!! %s\n" % l, level=logging.ERROR, noiselevel=-1)
+                writemsg_level("!!!! %s\n" % l, level=logging.ERROR, noiselevel=-1)
             return False
 
         try:
             self.repo_storage
         except RepoStorageException as e:
-            writemsg_level("!!! %s\n" % (e,), level=logging.ERROR, noiselevel=-1)
+            writemsg_level("!!!! %s\n" % (e,), level=logging.ERROR, noiselevel=-1)
             return False
 
         return True
@@ -240,7 +240,7 @@ class SyncBase:
         if errors:
             lines = []
             lines.append("")
-            lines.append("!!! Retry disabled for openpgp key refresh:")
+            lines.append("!!!! Retry disabled for openpgp key refresh:")
             lines.append("")
             for msg in errors:
                 lines.append("    {}".format(msg))
diff --git a/lib/portage/tests/resolver/test_autounmask.py b/lib/portage/tests/resolver/test_autounmask.py
index 4e98e5bfc..f9d1b67b4 100644
--- a/lib/portage/tests/resolver/test_autounmask.py
+++ b/lib/portage/tests/resolver/test_autounmask.py
@@ -320,7 +320,7 @@ class AutounmaskTestCase(TestCase):
             # # required by =app-portage/A-1 (argument)
             # >=app-portage/B-1 foo
             #
-            # !!! The ebuild selected to satisfy "app-portage/B[foo]" has unmet requirements.
+            # !!!! The ebuild selected to satisfy "app-portage/B[foo]" has unmet requirements.
             # - app-portage/B-1::test_repo USE="bar (forced-flag) -foo"
             #
             #   The following REQUIRED_USE flag constraints are unsatisfied:
@@ -337,7 +337,7 @@ class AutounmaskTestCase(TestCase):
             # # required by =app-portage/A-2 (argument)
             # >=app-portage/B-1 foo
             #
-            # !!! The ebuild selected to satisfy "app-portage/B[foo=]" has unmet requirements.
+            # !!!! The ebuild selected to satisfy "app-portage/B[foo=]" has unmet requirements.
             # - app-portage/B-1::test_repo USE="bar (forced-flag) -foo"
             #
             #   The following REQUIRED_USE flag constraints are unsatisfied:
@@ -363,7 +363,7 @@ class AutounmaskTestCase(TestCase):
             # # required by sci-mathematics/octave (argument)
             # >=x11-libs/qscintilla-2.9.4 qt5
             #
-            # !!! The ebuild selected to satisfy ">=x11-libs/qscintilla-2.9.3-r2:=[qt5(+)]" has unmet requirements.
+            # !!!! The ebuild selected to satisfy ">=x11-libs/qscintilla-2.9.3-r2:=[qt5(+)]" has unmet requirements.
             # - x11-libs/qscintilla-2.9.4::test_repo USE="qt4 -qt5"
             #
             #   The following REQUIRED_USE flag constraints are unsatisfied:
diff --git a/lib/portage/tests/resolver/test_autounmask_use_breakage.py b/lib/portage/tests/resolver/test_autounmask_use_breakage.py
index 02c08affa..6320deead 100644
--- a/lib/portage/tests/resolver/test_autounmask_use_breakage.py
+++ b/lib/portage/tests/resolver/test_autounmask_use_breakage.py
@@ -37,7 +37,7 @@ class AutounmaskUseBreakageTestCase(TestCase):
             ),
             # With --autounmask-backtrack=y:
             # emerge: there are no ebuilds built with USE flags to satisfy "app-misc/D[foo]".
-            #!!! One of the following packages is required to complete your request:
+            #!!!! One of the following packages is required to complete your request:
             # - app-misc/D-0::test_repo (Change USE: +foo)
             # (dependency required by "app-misc/B-0::test_repo" [ebuild])
             # (dependency required by "app-misc/B" [argument])
@@ -48,8 +48,8 @@ class AutounmaskUseBreakageTestCase(TestCase):
             # [ebuild  N     ] app-misc/B-0
             # [ebuild  N     ] app-misc/A-0
             #
-            #!!! Multiple package instances within a single package slot have been pulled
-            #!!! into the dependency graph, resulting in a slot conflict:
+            #!!!! Multiple package instances within a single package slot have been pulled
+            #!!!! into the dependency graph, resulting in a slot conflict:
             #
             # app-misc/D:0
             #
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
index b392aaded..25b32d639 100644
--- a/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
@@ -120,12 +120,12 @@ class SlotConflictUnsatisfiedDeepDepsTestCase(TestCase):
             # required by @world (argument)
             # =dev-libs/A-2 ~x86
             #
-            #!!! Problems have been detected with your world file
-            #!!! Please run emaint --check world
+            #!!!! Problems have been detected with your world file
+            #!!!! Please run emaint --check world
             #
             #
-            #!!! Ebuilds for the following packages are either all
-            #!!! masked or don't exist:
+            #!!!! Ebuilds for the following packages are either all
+            #!!!! masked or don't exist:
             # dev-libs/broken
             #
             # emerge: there are no ebuilds to satisfy "dev-libs/initially-unsatisfied".
@@ -133,8 +133,8 @@ class SlotConflictUnsatisfiedDeepDepsTestCase(TestCase):
             # (dependency required by "@selected" [set])
             # (dependency required by "@world" [argument])
             # Without --autounmask-backtrack=y:
-            #!!! Multiple package instances within a single package slot have been pulled
-            #!!! into the dependency graph, resulting in a slot conflict:
+            #!!!! Multiple package instances within a single package slot have been pulled
+            #!!!! into the dependency graph, resulting in a slot conflict:
             #
             # dev-libs/A:0
             #
diff --git a/lib/portage/update.py b/lib/portage/update.py
index 0ccca6e26..64296c75c 100644
--- a/lib/portage/update.py
+++ b/lib/portage/update.py
@@ -452,9 +452,9 @@ def update_config_files(
         try:
             write_atomic(updating_file, "".join(file_contents[x]))
         except PortageException as e:
-            writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
+            writemsg("\n!!!! %s\n" % str(e), noiselevel=-1)
             writemsg(
-                _("!!! An error occurred while updating a config file:")
+                _("!!!! An error occurred while updating a config file:")
                 + " '%s'\n" % updating_file,
                 noiselevel=-1,
             )
diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index 5ade7f660..bc5498cd0 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -220,19 +220,19 @@ def stack_dictlist(original_dicts, incremental=0, incrementals=[], ignore_none=0
     Returns a single dict. Higher index in lists is preferenced.
 
     Example usage:
-       >>> from portage.util import stack_dictlist
-            >>> print stack_dictlist( [{'a':'b'},{'x':'y'}])
-            >>> {'a':'b','x':'y'}
-            >>> print stack_dictlist( [{'a':'b'},{'a':'c'}], incremental = True )
-            >>> {'a':['b','c'] }
-            >>> a = {'KEYWORDS':['x86','alpha']}
-            >>> b = {'KEYWORDS':['-x86']}
-            >>> print stack_dictlist( [a,b] )
-            >>> { 'KEYWORDS':['x86','alpha','-x86']}
-            >>> print stack_dictlist( [a,b], incremental=True)
-            >>> { 'KEYWORDS':['alpha'] }
-            >>> print stack_dictlist( [a,b], incrementals=['KEYWORDS'])
-            >>> { 'KEYWORDS':['alpha'] }
+       >>>> from portage.util import stack_dictlist
+            >>>> print stack_dictlist( [{'a':'b'},{'x':'y'}])
+            >>>> {'a':'b','x':'y'}
+            >>>> print stack_dictlist( [{'a':'b'},{'a':'c'}], incremental = True )
+            >>>> {'a':['b','c'] }
+            >>>> a = {'KEYWORDS':['x86','alpha']}
+            >>>> b = {'KEYWORDS':['-x86']}
+            >>>> print stack_dictlist( [a,b] )
+            >>>> { 'KEYWORDS':['x86','alpha','-x86']}
+            >>>> print stack_dictlist( [a,b], incremental=True)
+            >>>> { 'KEYWORDS':['alpha'] }
+            >>>> print stack_dictlist( [a,b], incrementals=['KEYWORDS'])
+            >>>> { 'KEYWORDS':['alpha'] }
 
     @param original_dicts a list of (dictionary objects or None)
     @type list
@@ -827,7 +827,7 @@ def getconfig(
     if portage._native_string("\r") in content:
         writemsg(
             (
-                "!!! "
+                "!!!! "
                 + _(
                     "Please use dos2unix to convert line endings "
                     + "in config file: '%s'"
@@ -1071,7 +1071,7 @@ def pickle_read(filename, default=None, debug=0):
     except SystemExit as e:
         raise
     except Exception as e:
-        writemsg(_("!!! Failed to load pickle: ") + str(e) + "\n", 1)
+        writemsg(_("!!!! Failed to load pickle: ") + str(e) + "\n", 1)
         data = default
     return data
 
diff --git a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
index fd5c97362..a5cd1fb4f 100644
--- a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
+++ b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
@@ -101,7 +101,7 @@ class PreservedLibsRegistry:
                     raise
                 except Exception:
                     writemsg_level(
-                        _("!!! Error loading '%s': %s\n") % (self._filename, e),
+                        _("!!!! Error loading '%s': %s\n") % (self._filename, e),
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -147,7 +147,7 @@ class PreservedLibsRegistry:
         except EnvironmentError as e:
             if e.errno != PermissionDenied.errno:
                 writemsg_level(
-                    "!!! %s %s\n" % (e, self._filename),
+                    "!!!! %s %s\n" % (e, self._filename),
                     level=logging.ERROR,
                     noiselevel=-1,
                 )
diff --git a/lib/portage/util/_dyn_libs/display_preserved_libs.py b/lib/portage/util/_dyn_libs/display_preserved_libs.py
index e81ca369c..c6da339fe 100644
--- a/lib/portage/util/_dyn_libs/display_preserved_libs.py
+++ b/lib/portage/util/_dyn_libs/display_preserved_libs.py
@@ -20,7 +20,7 @@ def display_preserved_libs(vardb, verbose=False):
         linkmap.rebuild()
     except portage.exception.CommandNotFound as e:
         portage.util.writemsg_level(
-            "!!! Command Not Found: %s\n" % (e,), level=logging.ERROR, noiselevel=-1
+            "!!!! Command Not Found: %s\n" % (e,), level=logging.ERROR, noiselevel=-1
         )
     else:
         search_for_owners = set()
@@ -54,7 +54,7 @@ def display_preserved_libs(vardb, verbose=False):
     all_preserved.update(*plibdata.values())
 
     for cpv in plibdata:
-        print(colorize("WARN", ">>>") + " package: %s" % cpv)
+        print(colorize("WARN", ">>>>") + " package: %s" % cpv)
         samefile_map = {}
         for f in plibdata[cpv]:
             obj_key = linkmap._obj_key(f)
diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index bb0ebf84c..98ed62608 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -146,12 +146,12 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
         try:
             myconfig = getconfig(file_path, expand=False)
         except ParseError as e:
-            writemsg("!!! '%s'\n" % str(e), noiselevel=-1)
+            writemsg("!!!! '%s'\n" % str(e), noiselevel=-1)
             del e
             continue
         if myconfig is None:
             # broken symlink or file removed by a concurrent process
-            writemsg("!!! File Not Found: '%s'\n" % file_path, noiselevel=-1)
+            writemsg("!!!! File Not Found: '%s'\n" % file_path, noiselevel=-1)
             continue
 
         config_list.append(myconfig)
@@ -365,12 +365,12 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
             # to overwrite the symlinks we just made. -X means no links. After 'clean'
             # we can safely create links.
             writemsg_level(
-                _(">>> Regenerating %setc/ld.so.cache...\n") % (target_root,)
+                _(">>>> Regenerating %setc/ld.so.cache...\n") % (target_root,)
             )
             os.system("cd / ; %s -X -r '%s'" % (ldconfig, target_root))
         elif ostype in ("FreeBSD", "DragonFly"):
             writemsg_level(
-                _(">>> Regenerating %svar/run/ld-elf.so.hints...\n") % target_root
+                _(">>>> Regenerating %svar/run/ld-elf.so.hints...\n") % target_root
             )
             os.system(
                 (
diff --git a/lib/portage/util/locale.py b/lib/portage/util/locale.py
index 8fb6cb6eb..e4849bcfb 100644
--- a/lib/portage/util/locale.py
+++ b/lib/portage/util/locale.py
@@ -90,7 +90,7 @@ def _check_locale(silent):
                 ]
             )
         writemsg_level(
-            "".join(["!!! %s\n" % l for l in msg]), level=logging.ERROR, noiselevel=-1
+            "".join(["!!!! %s\n" % l for l in msg]), level=logging.ERROR, noiselevel=-1
         )
         return False
 
diff --git a/lib/portage/util/movefile.py b/lib/portage/util/movefile.py
index ddafe5571..299d1b989 100644
--- a/lib/portage/util/movefile.py
+++ b/lib/portage/util/movefile.py
@@ -149,9 +149,9 @@ def movefile(
         raise
     except Exception as e:
         writemsg(
-            "!!! %s\n" % _("Stating source file failed... movefile()"), noiselevel=-1
+            "!!!! %s\n" % _("Stating source file failed... movefile()"), noiselevel=-1
         )
-        writemsg("!!! %s\n" % (e,), noiselevel=-1)
+        writemsg("!!!! %s\n" % (e,), noiselevel=-1)
         return None
 
     destexists = 1
@@ -223,10 +223,10 @@ def movefile(
             raise
         except Exception as e:
             writemsg(
-                "!!! %s\n" % _("failed to properly create symlink:"), noiselevel=-1
+                "!!!! %s\n" % _("failed to properly create symlink:"), noiselevel=-1
             )
-            writemsg("!!! %s -> %s\n" % (dest, target), noiselevel=-1)
-            writemsg("!!! %s\n" % (e,), noiselevel=-1)
+            writemsg("!!!! %s -> %s\n" % (dest, target), noiselevel=-1)
+            writemsg("!!!! %s\n" % (e,), noiselevel=-1)
             return None
 
     hardlinked = False
@@ -244,11 +244,11 @@ def movefile(
         except OSError as e:
             if e.errno != errno.ENOENT:
                 writemsg(
-                    _("!!! Failed to remove hardlink temp file: %s\n")
+                    _("!!!! Failed to remove hardlink temp file: %s\n")
                     % (hardlink_tmp,),
                     noiselevel=-1,
                 )
-                writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                writemsg("!!!! %s\n" % (e,), noiselevel=-1)
                 return None
             del e
         for hardlink_src in hardlink_candidates:
@@ -261,10 +261,10 @@ def movefile(
                     os.rename(hardlink_tmp, dest)
                 except OSError as e:
                     writemsg(
-                        _("!!! Failed to rename %s to %s\n") % (hardlink_tmp, dest),
+                        _("!!!! Failed to rename %s to %s\n") % (hardlink_tmp, dest),
                         noiselevel=-1,
                     )
-                    writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                    writemsg("!!!! %s\n" % (e,), noiselevel=-1)
                     return None
                 hardlinked = True
                 try:
@@ -287,12 +287,12 @@ def movefile(
             if e.errno != errno.EXDEV:
                 # Some random error.
                 writemsg(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _("Failed to move %(src)s to %(dest)s")
                     % {"src": src, "dest": dest},
                     noiselevel=-1,
                 )
-                writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                writemsg("!!!! %s\n" % (e,), noiselevel=-1)
                 return None
             # Invalid cross-device-link 'bind' mounted or actually Cross-Device
     if renamefailed:
@@ -322,19 +322,19 @@ def movefile(
                         )
                         msg = textwrap.wrap(msg, 65)
                         for line in msg:
-                            writemsg("!!! %s\n" % (line,), noiselevel=-1)
+                            writemsg("!!!! %s\n" % (line,), noiselevel=-1)
                         raise
                 _rename(dest_tmp_bytes, dest_bytes)
                 _os.unlink(src_bytes)
                 success = True
             except Exception as e:
                 writemsg(
-                    "!!! %s\n"
+                    "!!!! %s\n"
                     % _("copy %(src)s -> %(dest)s failed.")
                     % {"src": src, "dest": dest},
                     noiselevel=-1,
                 )
-                writemsg("!!! %s\n" % (e,), noiselevel=-1)
+                writemsg("!!!! %s\n" % (e,), noiselevel=-1)
                 return None
             finally:
                 if not success:
@@ -346,16 +346,16 @@ def movefile(
             # we don't yet handle special, so we need to fall back to /bin/mv
             a = spawn([MOVE_BINARY, "-f", src, dest], env=os.environ)
             if a != os.EX_OK:
-                writemsg(_("!!! Failed to move special file:\n"), noiselevel=-1)
+                writemsg(_("!!!! Failed to move special file:\n"), noiselevel=-1)
                 writemsg(
-                    _("!!! '%(src)s' to '%(dest)s'\n")
+                    _("!!!! '%(src)s' to '%(dest)s'\n")
                     % {
                         "src": _unicode_decode(src, encoding=encoding),
                         "dest": _unicode_decode(dest, encoding=encoding),
                     },
                     noiselevel=-1,
                 )
-                writemsg("!!! %s\n" % a, noiselevel=-1)
+                writemsg("!!!! %s\n" % a, noiselevel=-1)
                 return None  # failure
 
     # In Python <3.3 always use stat_obj[stat.ST_MTIME] for the integral timestamp
@@ -384,9 +384,9 @@ def movefile(
         try:
             newmtime = os.stat(dest).st_mtime_ns
         except OSError as e:
-            writemsg(_("!!! Failed to stat in movefile()\n"), noiselevel=-1)
-            writemsg("!!! %s\n" % dest, noiselevel=-1)
-            writemsg("!!! %s\n" % str(e), noiselevel=-1)
+            writemsg(_("!!!! Failed to stat in movefile()\n"), noiselevel=-1)
+            writemsg("!!!! %s\n" % dest, noiselevel=-1)
+            writemsg("!!!! %s\n" % str(e), noiselevel=-1)
             return None
 
     if bsd_chflags:
diff --git a/lib/portage/util/mtimedb.py b/lib/portage/util/mtimedb.py
index 7a7fe6784..77ced65b1 100644
--- a/lib/portage/util/mtimedb.py
+++ b/lib/portage/util/mtimedb.py
@@ -46,7 +46,7 @@ class MtimeDB(dict):
                 pass
             else:
                 writemsg(
-                    _("!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
+                    _("!!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
                 )
         finally:
             if f is not None:
@@ -75,7 +75,8 @@ class MtimeDB(dict):
                     raise
                 except Exception:
                     writemsg(
-                        _("!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
+                        _("!!!! Error loading '%s': %s\n") % (filename, e),
+                        noiselevel=-1,
                     )
 
         if d is None:
diff --git a/lib/portage/util/writeable_check.py b/lib/portage/util/writeable_check.py
index be73745a1..d4d36846b 100644
--- a/lib/portage/util/writeable_check.py
+++ b/lib/portage/util/writeable_check.py
@@ -88,7 +88,7 @@ def linux_ro_checker(dir_list):
     # filesystems and return.
     except EnvironmentError:
         writemsg_level(
-            _("!!! /proc/self/mountinfo cannot be read"),
+            _("!!!! /proc/self/mountinfo cannot be read"),
             level=logging.WARNING,
             noiselevel=-1,
         )
@@ -96,7 +96,7 @@ def linux_ro_checker(dir_list):
 
     for line in invalids:
         writemsg_level(
-            _("!!! /proc/self/mountinfo contains unrecognized line: %s\n")
+            _("!!!! /proc/self/mountinfo contains unrecognized line: %s\n")
             % line.rstrip(),
             level=logging.WARNING,
             noiselevel=-1,
diff --git a/lib/portage/versions.py b/lib/portage/versions.py
index fe1ff6ce0..68d69bdf4 100644
--- a/lib/portage/versions.py
+++ b/lib/portage/versions.py
@@ -148,7 +148,7 @@ def ververify(myver, silent=1):
     if ver_regexp.match(myver):
         return True
     if not silent:
-        print(_("!!! syntax error in version: %s") % myver)
+        print(_("!!!! syntax error in version: %s") % myver)
     return False
 
 
@@ -157,12 +157,12 @@ def vercmp(ver1, ver2, silent=1):
     """
     Compare two versions
     Example usage:
-            >>> from portage.versions import vercmp
-            >>> vercmp('1.0-r1','1.2-r3')
+            >>>> from portage.versions import vercmp
+            >>>> vercmp('1.0-r1','1.2-r3')
             negative number
-            >>> vercmp('1.3','1.2-r3')
+            >>>> vercmp('1.3','1.2-r3')
             positive number
-            >>> vercmp('1.0_p3','1.0_p3')
+            >>>> vercmp('1.0_p3','1.0_p3')
             0
 
     @param pkg1: version to compare with (see ver_regexp in portage.versions.py)
@@ -186,11 +186,11 @@ def vercmp(ver1, ver2, silent=1):
     # checking that the versions are valid
     if not match1 or not match1.groups():
         if not silent:
-            print(_("!!! syntax error in version: %s") % ver1)
+            print(_("!!!! syntax error in version: %s") % ver1)
         return None
     if not match2 or not match2.groups():
         if not silent:
-            print(_("!!! syntax error in version: %s") % ver2)
+            print(_("!!!! syntax error in version: %s") % ver2)
         return None
 
     # building lists of the version parts before the suffix
@@ -305,10 +305,10 @@ def pkgcmp(pkg1, pkg2):
     Compare 2 package versions created in pkgsplit format.
 
     Example usage:
-            >>> from portage.versions import *
-            >>> pkgcmp(pkgsplit('test-1.0-r1'),pkgsplit('test-1.2-r3'))
+            >>>> from portage.versions import *
+            >>>> pkgcmp(pkgsplit('test-1.0-r1'),pkgsplit('test-1.2-r3'))
             -1
-            >>> pkgcmp(pkgsplit('test-1.3'),pkgsplit('test-1.2-r3'))
+            >>>> pkgcmp(pkgsplit('test-1.3'),pkgsplit('test-1.2-r3'))
             1
 
     @param pkg1: package to compare with
diff --git a/lib/portage/xml/metadata.py b/lib/portage/xml/metadata.py
index 807847d7e..f65177c8e 100644
--- a/lib/portage/xml/metadata.py
+++ b/lib/portage/xml/metadata.py
@@ -4,27 +4,27 @@
 """Provides an easy-to-use python interface to Gentoo's metadata.xml file.
 
 	Example usage:
-		>>> from portage.xml.metadata import MetaDataXML
-		>>> pkg_md = MetaDataXML('/var/db/repos/gentoo/app-misc/gourmet/metadata.xml')
-		>>> pkg_md
+		>>>> from portage.xml.metadata import MetaDataXML
+		>>>> pkg_md = MetaDataXML('/var/db/repos/gentoo/app-misc/gourmet/metadata.xml')
+		>>>> pkg_md
 		<MetaDataXML '/var/db/repos/gentoo/app-misc/gourmet/metadata.xml'>
-		>>> pkg_md.herds()
+		>>>> pkg_md.herds()
 		['no-herd']
-		>>> for maint in pkg_md.maintainers():
+		>>>> for maint in pkg_md.maintainers():
 		...     print "{0} ({1})".format(maint.email, maint.name)
 		...
 		nixphoeni@gentoo.org (Joe Sapp)
-		>>> for flag in pkg_md.use():
+		>>>> for flag in pkg_md.use():
 		...     print flag.name, "->", flag.description
 		...
 		rtf -> Enable export to RTF
 		gnome-print -> Enable printing support using gnome-print
-		>>> upstream = pkg_md.upstream()
-		>>> upstream
+		>>>> upstream = pkg_md.upstream()
+		>>>> upstream
 		[<_Upstream {'docs': [], 'remoteid': [], 'maintainer':
 		 [<_Maintainer 'Thomas_Hinkle@alumni.brown.edu'>], 'bugtracker': [],
 		 'changelog': []}>]
-		>>> upstream[0].maintainer[0].name
+		>>>> upstream[0].maintainer[0].name
 		'Thomas Mills Hinkle'
 """
 
diff --git a/misc/emerge-delta-webrsync b/misc/emerge-delta-webrsync
index 082e15e52..e10acb9a5 100755
--- a/misc/emerge-delta-webrsync
+++ b/misc/emerge-delta-webrsync
@@ -597,10 +597,10 @@ verify_md5_file() {
 #--------------------
 
 if ! type -p patcher &> /dev/null; then
-	echo "!!!"
-	echo "!!! cannot find patcher, did you emerge dev-util/diffball?"
-	echo "!!! lack of patcher == have to do full fetch"
-	echo "!!!"
+	echo "!!!!"
+	echo "!!!! cannot find patcher, did you emerge dev-util/diffball?"
+	echo "!!!! lack of patcher == have to do full fetch"
+	echo "!!!!"
 	sleep 10
 	if do_latest_snapshot; then
 		rm -fr "${TMPDIR}"
diff --git a/repoman/lib/repoman/__init__.py b/repoman/lib/repoman/__init__.py
index b3690c07d..403bd3af9 100644
--- a/repoman/lib/repoman/__init__.py
+++ b/repoman/lib/repoman/__init__.py
@@ -11,21 +11,21 @@ try:
 except ImportError as e:
     sys.stderr.write("\n\n")
     sys.stderr.write(
-        "!!! Failed to complete portage imports. There are internal modules for\n"
+        "!!!! Failed to complete portage imports. There are internal modules for\n"
     )
     sys.stderr.write(
-        "!!! portage and failure here indicates that you have a problem with your\n"
+        "!!!! portage and failure here indicates that you have a problem with your\n"
     )
     sys.stderr.write(
-        "!!! installation of portage. Please try a rescue portage located in the ebuild\n"
+        "!!!! installation of portage. Please try a rescue portage located in the ebuild\n"
     )
     sys.stderr.write(
-        "!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
+        "!!!! repository under '/var/db/repos/gentoo/sys-apps/portage/files/' (default).\n"
     )
     sys.stderr.write(
-        "!!! There is a README.RESCUE file that details the steps required to perform\n"
+        "!!!! There is a README.RESCUE file that details the steps required to perform\n"
     )
-    sys.stderr.write("!!! a recovery of portage.\n")
+    sys.stderr.write("!!!! a recovery of portage.\n")
     sys.stderr.write("    " + str(e) + "\n\n")
     raise
 
diff --git a/repoman/lib/repoman/actions.py b/repoman/lib/repoman/actions.py
index 920f0e97a..fdbbcb0d1 100644
--- a/repoman/lib/repoman/actions.py
+++ b/repoman/lib/repoman/actions.py
@@ -117,7 +117,7 @@ class Actions:
             except (IOError, OSError) as e:
                 if e.errno == errno.ENOENT:
                     portage.writemsg(
-                        "!!! File Not Found:"
+                        "!!!! File Not Found:"
                         " --commitmsgfile='%s'\n" % self.options.commitmsgfile
                     )
                 else:
@@ -379,7 +379,7 @@ the whole commit message to abort.
                     # so it's safe to ignore.
                     del myunadded[x]
                 elif xs[-1] == "files":
-                    print("!!! files dir is not added! Please correct this.")
+                    print("!!!! files dir is not added! Please correct this.")
                     sys.exit(-1)
                 elif xs[-1] == "Manifest":
                     # It's a manifest... auto add
@@ -389,13 +389,13 @@ the whole commit message to abort.
         if myunadded:
             print(
                 red(
-                    "!!! The following files are in your local tree"
+                    "!!!! The following files are in your local tree"
                     " but are not added to the master"
                 )
             )
             print(
                 red(
-                    "!!! tree. Please remove them from the local tree"
+                    "!!!! tree. Please remove them from the local tree"
                     " or add them to the master tree."
                 )
             )
@@ -410,13 +410,13 @@ the whole commit message to abort.
         if self.vcs_settings.changes.has_deleted:
             print(
                 red(
-                    "!!! The following files are removed manually"
+                    "!!!! The following files are removed manually"
                     " from your local tree but are not"
                 )
             )
             print(
                 red(
-                    "!!! removed from the repository."
+                    "!!!! removed from the repository."
                     ' Please remove them, using "%s remove [FILES]".'
                     % self.vcs_settings.vcs
                 )
@@ -608,7 +608,7 @@ the whole commit message to abort.
                 )
                 if new_changelog is None:
                     writemsg_level(
-                        "!!! Updating the ChangeLog failed\n",
+                        "!!!! Updating the ChangeLog failed\n",
                         level=logging.ERROR,
                         noiselevel=-1,
                     )
@@ -632,7 +632,7 @@ the whole commit message to abort.
                     broken_changelog_manifests.append(x)
 
         if myautoadd:
-            print(">>> Auto-Adding missing Manifest/ChangeLog file(s)...")
+            print(">>>> Auto-Adding missing Manifest/ChangeLog file(s)...")
             self.vcs_settings.changes.add_items(myautoadd)
             myupdates += myautoadd
         return myupdates, broken_changelog_manifests
@@ -660,7 +660,7 @@ the whole commit message to abort.
             pass
         if retval != os.EX_OK:
             writemsg_level(
-                "!!! Exiting on %s (shell) "
+                "!!!! Exiting on %s (shell) "
                 "error code: %s\n" % (self.vcs_settings.vcs, retval),
                 level=logging.ERROR,
                 noiselevel=-1,
@@ -696,7 +696,7 @@ the whole commit message to abort.
             pass
         if retval != os.EX_OK:
             writemsg_level(
-                "!!! Exiting on %s (shell) "
+                "!!!! Exiting on %s (shell) "
                 "error code: %s\n" % (self.vcs_settings.vcs, retval),
                 level=logging.ERROR,
                 noiselevel=-1,
@@ -720,8 +720,8 @@ the whole commit message to abort.
                     continue
                 gpgsign(manifest_path, self.repoman_settings, self.options)
         except portage.exception.PortageException as e:
-            portage.writemsg("!!! %s\n" % str(e))
-            portage.writemsg("!!! Disabled FEATURES='sign'\n")
+            portage.writemsg("!!!! %s\n" % str(e))
+            portage.writemsg("!!!! Disabled FEATURES='sign'\n")
             self.repo_settings.sign_manifests = False
 
     def msg_prefix(self):
diff --git a/repoman/lib/repoman/gpg.py b/repoman/lib/repoman/gpg.py
index 10e884e52..9bed52606 100644
--- a/repoman/lib/repoman/gpg.py
+++ b/repoman/lib/repoman/gpg.py
@@ -57,7 +57,7 @@ def gpgsign(filename, repoman_settings, options):
             os.rename(filename + ".asc", filename)
         else:
             raise portage.exception.PortageException(
-                "!!! gpg exited with '" + str(rValue) + "' status"
+                "!!!! gpg exited with '" + str(rValue) + "' status"
             )
 
 
diff --git a/repoman/lib/repoman/modules/commit/manifest.py b/repoman/lib/repoman/modules/commit/manifest.py
index e282ad406..bee80effa 100644
--- a/repoman/lib/repoman/modules/commit/manifest.py
+++ b/repoman/lib/repoman/modules/commit/manifest.py
@@ -48,14 +48,14 @@ class Manifest:
         except portage.exception.PermissionDenied as e:
             self.generated_manifest = False
             writemsg_level(
-                "!!! Permission denied: '%s'\n" % (e,),
+                "!!!! Permission denied: '%s'\n" % (e,),
                 level=logging.ERROR,
                 noiselevel=-1,
             )
 
         if not self.generated_manifest:
             writemsg_level(
-                "!!! Unable to generate manifest for '%s'.\n" % (checkdir,),
+                "!!!! Unable to generate manifest for '%s'.\n" % (checkdir,),
                 level=logging.ERROR,
                 noiselevel=-1,
             )
diff --git a/repoman/lib/repoman/modules/vcs/cvs/status.py b/repoman/lib/repoman/modules/vcs/cvs/status.py
index 0d131c75a..71570bf24 100644
--- a/repoman/lib/repoman/modules/vcs/cvs/status.py
+++ b/repoman/lib/repoman/modules/vcs/cvs/status.py
@@ -94,11 +94,11 @@ class Status:
                     continue
                 logging.error(
                     red(
-                        "!!! Please fix the following issues reported "
+                        "!!!! Please fix the following issues reported "
                         "from cvs: %s" % green("(U,P,M,A,R,D are ok)")
                     )
                 )
-                logging.error(red("!!! Note: This is a pretend/no-modify pass..."))
+                logging.error(red("!!!! Note: This is a pretend/no-modify pass..."))
                 logging.error(out)
                 sys.exit(1)
             elif line[0] in "UP":
@@ -112,7 +112,7 @@ class Status:
             else:
                 retval = os.system("cvs update " + " ".join(myupdates))
             if retval != os.EX_OK:
-                logging.fatal("!!! cvs exited with an error. Terminating.")
+                logging.fatal("!!!! cvs exited with an error. Terminating.")
                 sys.exit(retval)
         return False
 
diff --git a/repoman/lib/repoman/modules/vcs/git/changes.py b/repoman/lib/repoman/modules/vcs/git/changes.py
index 3430cf3ec..da3a87c55 100644
--- a/repoman/lib/repoman/modules/vcs/git/changes.py
+++ b/repoman/lib/repoman/modules/vcs/git/changes.py
@@ -120,7 +120,7 @@ class Changes(ChangesBase):
             retval = spawn(update_index_cmd, env=os.environ)
             if retval != os.EX_OK:
                 writemsg_level(
-                    "!!! Exiting on %s (shell) "
+                    "!!!! Exiting on %s (shell) "
                     "error code: %s\n" % (self.vcs_settings.vcs, retval),
                     level=logging.ERROR,
                     noiselevel=-1,
diff --git a/repoman/lib/repoman/modules/vcs/svn/status.py b/repoman/lib/repoman/modules/vcs/svn/status.py
index 2e6ee927d..82ac29f68 100644
--- a/repoman/lib/repoman/modules/vcs/svn/status.py
+++ b/repoman/lib/repoman/modules/vcs/svn/status.py
@@ -111,11 +111,11 @@ class Status:
                     continue
                 logging.error(
                     red(
-                        "!!! Please fix the following issues reported "
+                        "!!!! Please fix the following issues reported "
                         "from cvs: %s" % green("(U,P,M,A,R,D are ok)")
                     )
                 )
-                logging.error(red("!!! Note: This is a pretend/no-modify pass..."))
+                logging.error(red("!!!! Note: This is a pretend/no-modify pass..."))
                 logging.error(out)
                 sys.exit(1)
             elif line[8] == "*":
@@ -129,7 +129,7 @@ class Status:
             else:
                 retval = os.system("svn update " + " ".join(myupdates))
             if retval != os.EX_OK:
-                logging.fatal("!!! svn exited with an error. Terminating.")
+                logging.fatal("!!!! svn exited with an error. Terminating.")
                 sys.exit(retval)
         return False
 
diff --git a/repoman/lib/repoman/scanner.py b/repoman/lib/repoman/scanner.py
index 890950c65..f4c71c9a2 100644
--- a/repoman/lib/repoman/scanner.py
+++ b/repoman/lib/repoman/scanner.py
@@ -456,7 +456,7 @@ class Scanner:
                             # Do not try to do any more QA checks on this package since missing
                             # metadata leads to false positives for several checks, and false
                             # positives confuse users.
-                            # logging.debug("\t>>> Continuing")
+                            # logging.debug("\t>>>> Continuing")
                             break
 
             logging.debug("Finished ebuild plugin loop, continuing...")
@@ -480,5 +480,5 @@ class Scanner:
                     logging.debug("\tRunning function: %s", func)
                     _continue = func(**self.set_func_kwargs(mod, dynamic_data))
                     if _continue:
-                        # logging.debug("\t>>> Continuing")
+                        # logging.debug("\t>>>> Continuing")
                         break
-- 
2.33.0



^ permalink raw reply related	[relevance 99%]

Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-09-28 14:20     [gentoo-portage-dev] [PATCH 0/4] Output rewrite for better clarify and greppability Michał Górny
2021-09-28 14:20 99% ` [gentoo-portage-dev] [PATCH 4/4] Use ">>>>" and "!!!!" for output prefixes Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox