rendered paste bodydiff --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 -1diff --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()]))