# HG changeset patch # User Siddharth Agarwal # Date 2016-02-12 06:52:23 # Node ID 37b818cad14664f7cf262a3cfb1f81e616dd1f4d # Parent 0c9e914029be47569f58cd39ce1f1763d2b03633 hook: for python hook ImportErrors, add note to run with --traceback I personally found it completely non-obvious that --traceback prints out stack traces for failed imports. diff --git a/mercurial/hook.py b/mercurial/hook.py --- a/mercurial/hook.py +++ b/mercurial/hook.py @@ -64,9 +64,15 @@ def _pythonhook(ui, repo, name, hname, f ui.warn(_('exception from second failed import ' 'attempt:\n')) ui.traceback(e2) + + if not ui.tracebackflag: + tracebackhint = _( + 'run with --traceback for stack trace') + else: + tracebackhint = None raise error.HookLoadError( _('%s hook is invalid: import of "%s" failed') % - (hname, modname)) + (hname, modname), hint=tracebackhint) sys.path = oldpaths try: for p in funcname.split('.')[1:]: diff --git a/tests/test-hook.t b/tests/test-hook.t --- a/tests/test-hook.t +++ b/tests/test-hook.t @@ -505,6 +505,7 @@ test python hooks pulling from ../a searching for changes abort: preoutgoing.badmodule hook is invalid: import of "nomodule" failed + (run with --traceback for stack trace) [255] $ echo '[hooks]' > ../a/.hg/hgrc @@ -513,6 +514,7 @@ test python hooks pulling from ../a searching for changes abort: preoutgoing.unreachable hook is invalid: import of "hooktests.container" failed + (run with --traceback for stack trace) [255] $ echo '[hooks]' > ../a/.hg/hgrc