# HG changeset patch # User Martin von Zweigbergk # Date 2017-10-17 17:31:44 # Node ID 78d9a7b7cdb62227e852bc29a1687aca0a85de9c # Parent f0a62afd1e40b2309b56a60986066f7bb23c6a99 extensions: always include traceback when extension setup fails I have spent a lot of time debugging extensions that failed to load because we don't include a traceback and I didn't realize I could get traceback for the extension failure with --traceback. Let's just turn them on by default, since it should be rare that the user sees these tracebacks anyway (and if they do, it's not so bad if the extra traceback pushes them a little harder to report the problem). Since we already had a test case with --traceback and one without, I just removed the one with the flag. Differential Revision: https://phab.mercurial-scm.org/D1164 diff --git a/mercurial/extensions.py b/mercurial/extensions.py --- a/mercurial/extensions.py +++ b/mercurial/extensions.py @@ -182,7 +182,7 @@ def _runuisetup(name, ui): try: uisetup(ui) except Exception as inst: - ui.traceback() + ui.traceback(force=True) msg = util.forcebytestr(inst) ui.warn(_("*** failed to set up extension %s: %s\n") % (name, msg)) return False @@ -203,7 +203,7 @@ def _runextsetup(name, ui): raise extsetup() # old extsetup with no ui argument except Exception as inst: - ui.traceback() + ui.traceback(force=True) msg = util.forcebytestr(inst) ui.warn(_("*** failed to set up extension %s: %s\n") % (name, msg)) return False diff --git a/tests/test-extension.t b/tests/test-extension.t --- a/tests/test-extension.t +++ b/tests/test-extension.t @@ -524,15 +524,6 @@ Make sure a broken uisetup doesn't globa Even though the extension fails during uisetup, hg is still basically usable: $ hg --config extensions.baduisetup=$TESTTMP/baduisetup.py version - *** failed to set up extension baduisetup: integer division or modulo by zero - Mercurial Distributed SCM (version *) (glob) - (see https://mercurial-scm.org for more information) - - Copyright (C) 2005-2017 Matt Mackall and others - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - $ hg --config extensions.baduisetup=$TESTTMP/baduisetup.py version --traceback Traceback (most recent call last): File "*/mercurial/extensions.py", line *, in _runuisetup (glob) uisetup(ui) diff --git a/tests/test-flagprocessor.t b/tests/test-flagprocessor.t --- a/tests/test-flagprocessor.t +++ b/tests/test-flagprocessor.t @@ -162,8 +162,18 @@ > duplicate=$TESTDIR/flagprocessorext.py > EOF $ hg debugrebuilddirstate + Traceback (most recent call last): + File "*/mercurial/extensions.py", line *, in _runextsetup (glob) + extsetup(ui) + File "*/tests/flagprocessorext.py", line *, in extsetup (glob) + validatehash, + File "*/mercurial/revlog.py", line *, in addflagprocessor (glob) + raise error.Abort(msg) + Abort: cannot register multiple processors on flag '0x8'. *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'. $ hg st 2>&1 | egrep 'cannot register multiple processors|flagprocessorext' + File "*/tests/flagprocessorext.py", line *, in extsetup (glob) + Abort: cannot register multiple processors on flag '0x8'. *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'. File "*/tests/flagprocessorext.py", line *, in b64decode (glob)