[PATCH 3 of 6 py3 v2] extensions: tapdance to get reasonable import error formatting
Augie Fackler
raf at durin42.com
Wed Mar 8 17:51:17 EST 2017
# HG changeset patch
# User Augie Fackler <raf at durin42.com>
# Date 1488568082 18000
# Fri Mar 03 14:08:02 2017 -0500
# Node ID 9bd5ccf35922ec4e70a2f024f1291646b3bb6c18
# Parent 009c8aeb34d4f226ba15c54b37dbe8fb86cc103b
extensions: tapdance to get reasonable import error formatting
I'm not thrilled with this, but it seems to work.
diff --git a/mercurial/extensions.py b/mercurial/extensions.py
--- a/mercurial/extensions.py
+++ b/mercurial/extensions.py
@@ -18,6 +18,7 @@ from .i18n import (
from . import (
cmdutil,
+ encoding,
error,
pycompat,
util,
@@ -104,11 +105,19 @@ def _importext(name, path=None, reportfu
mod = _importh(name)
return mod
+def _forbytes(inst):
+ """Portably format an import error into a form suitable for
+ %-formatting into bytestrings."""
+ if pycompat.ispy3:
+ return str(inst).encode('utf-8')
+ return inst
+
def _reportimporterror(ui, err, failed, next):
# note: this ui.debug happens before --debug is processed,
# Use --config ui.debug=1 to see them.
- ui.debug('could not import %s (%s): trying %s\n'
- % (failed, err, next))
+ msg = 'could not import %s (%s): trying %s\n' % (
+ failed, _forbytes(err), next)
+ ui.debug(encoding.tolocal(msg))
if ui.debugflag:
ui.traceback()
@@ -168,12 +177,13 @@ def loadall(ui):
except KeyboardInterrupt:
raise
except Exception as inst:
+ inst = _forbytes(inst)
if path:
- ui.warn(_("*** failed to import extension %s from %s: %s\n")
- % (name, path, inst))
+ fmt = _("*** failed to import extension %s from %s: %s\n")
+ ui.warn(encoding.tolocal(fmt % (name, path, inst)))
else:
- ui.warn(_("*** failed to import extension %s: %s\n")
- % (name, inst))
+ fmt = _("*** failed to import extension %s: %s\n")
+ ui.warn(encoding.tolocal(fmt % (name, inst)))
ui.traceback()
for name in _order[newindex:]:
diff --git a/tests/test-check-py3-commands.t b/tests/test-check-py3-commands.t
--- a/tests/test-check-py3-commands.t
+++ b/tests/test-check-py3-commands.t
@@ -12,3 +12,12 @@ The full traceback is hidden to have a s
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
debuginstall
TypeError: Can't convert 'bytes' object to str implicitly
+
+ $ cat > included-hgrc <<EOF
+ > [extensions]
+ > babar = imaginary_elephant
+ > EOF
+ $ cat >> $HGRCPATH <<EOF
+ > %include $TESTTMP/included-hgrc
+ > EOF
+ $ $PYTHON3 `which hg` version --config ui.debug=1
More information about the Mercurial-devel
mailing list