diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -169,14 +169,7 @@ except socket.error, inst: ui.warn(_("abort: %s\n") % inst.args[-1]) except: - ui.warn(_("** unknown exception encountered," - " please report by visiting\n")) - ui.warn(_("** http://mercurial.selenic.com/wiki/BugTracker\n")) - ui.warn(_("** Python %s\n") % sys.version.replace('\n', '')) - ui.warn(_("** Mercurial Distributed SCM (version %s)\n") - % util.version()) - ui.warn(_("** Extensions loaded: %s\n") - % ", ".join([x[0] for x in extensions.extensions()])) + ui.exceptionheader(unknown=True) raise return -1 diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -7,7 +7,7 @@ from i18n import _ import errno, getpass, os, socket, sys, tempfile, traceback -import config, util, error +import config, util, error, extensions class ui(object): def __init__(self, src=None): @@ -624,3 +624,15 @@ ui.write(ui.label(s, 'label')). ''' return msg + + def exceptionheader(self, unknown=False): + '''useful information to output before printing a traceback''' + if unknown: + self.warn(_("** unknown exception encountered," + " please report by visiting\n")) + self.warn(_("** http://mercurial.selenic.com/wiki/BugTracker\n")) + self.warn(_("** Python %s\n") % sys.version.replace('\n', '')) + self.warn(_("** Mercurial Distributed SCM (version %s)\n") + % util.version()) + self.warn(_("** Extensions loaded: %s\n") + % ", ".join([x[0] for x in extensions.extensions()]))