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
This commit is contained in:
Martin von Zweigbergk 2017-10-17 10:31:44 -07:00
parent 6835c48840
commit 3fba6ca94a
3 changed files with 12 additions and 11 deletions

View File

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

View File

@ -524,15 +524,6 @@ Make sure a broken uisetup doesn't globally break hg:
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)

View File

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