From 8c4e6f90991c5cb662010aa337d0272a94add6ba Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Mon, 30 Mar 2015 16:23:35 +0900 Subject: [PATCH] extensions: show traceback on load failure if --traceback flag is set Before this patch, there was no handy way to investigate the reason why extension couldn't be loaded. If ui.debug is set, tracebacks of both "hgext.foo" and "foo" are displayed because the first ImportError could occur at very deep dependency module. --- mercurial/extensions.py | 3 +++ tests/test-bad-extension.t | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/mercurial/extensions.py b/mercurial/extensions.py index 11133ff705..a056482013 100644 --- a/mercurial/extensions.py +++ b/mercurial/extensions.py @@ -85,6 +85,8 @@ def load(ui, name, path): except ImportError, err: ui.debug('could not import hgext.%s (%s): trying %s\n' % (name, err, name)) + if ui.debugflag: + ui.traceback() mod = importh(name) _extensions[shortname] = mod _order.append(shortname) @@ -110,6 +112,7 @@ def loadall(ui): else: ui.warn(_("*** failed to import extension %s: %s\n") % (name, inst)) + ui.traceback() for name in _order[newindex:]: uisetup = getattr(_extensions[name], 'uisetup', None) diff --git a/tests/test-bad-extension.t b/tests/test-bad-extension.t index 6ca91dfe74..9d4629e66e 100644 --- a/tests/test-bad-extension.t +++ b/tests/test-bad-extension.t @@ -15,3 +15,32 @@ hg help [-ec] [TOPIC] show help for a given topic or a help overview + +show traceback + + $ hg -q help help --traceback 2>&1 | grep -v '^ ' + *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow + Traceback (most recent call last): + Exception: bit bucket overflow + *** failed to import extension badext2: No module named badext2 + Traceback (most recent call last): + ImportError: No module named badext2 + hg help [-ec] [TOPIC] + + show help for a given topic or a help overview + +show traceback for ImportError of hgext.name if debug is set +(note that --debug option isn't applied yet when loading extensions) + + $ hg help help --traceback --config ui.debug=True 2>&1 \ + > | grep -v '^ ' | head -n10 + *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow + Traceback (most recent call last): + Exception: bit bucket overflow + could not import hgext.badext2 (No module named badext2): trying badext2 + Traceback (most recent call last): + ImportError: No module named badext2 + *** failed to import extension badext2: No module named badext2 + Traceback (most recent call last): + ImportError: No module named badext2 + hg help [-ec] [TOPIC]