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.
This commit is contained in:
Yuya Nishihara 2015-03-30 16:23:35 +09:00
parent 398221202a
commit 8c4e6f9099
2 changed files with 32 additions and 0 deletions

View File

@ -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)

View File

@ -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]