Submitter | Pierre-Yves David |
---|---|
Date | Sept. 17, 2015, 7:11 p.m. |
Message ID | <224402df539757ac09d1.1442517095@marginatus.alto.octopoid.net> |
Download | mbox | patch |
Permalink | /patch/10526/ |
State | Rejected |
Headers | show |
Comments
On Thu, Sep 17, 2015 at 12:11:35PM -0700, Pierre-Yves David wrote: > # HG changeset patch > # User Pierre-Yves David <pierre-yves.david@fb.com> > # Date 1442000719 25200 > # Fri Sep 11 12:45:19 2015 -0700 > # Node ID 224402df539757ac09d1ec0b0f707aa8fab75634 > # Parent 75a8b3abe7bc407e84153134dadfa3815443210d > traceback: allow providing of a local support contact point This appears to be queued as bf2bfc6f45fb. > > The extensions blaming code is fine for casual users but pretty terrible for > corporate environments that can deploy a large amount of extensions to > unsuspecting users. Reports will likely blame a random "innocent" extension (in > our case crecord) and the hint in the message will triggers endless debug > attempts from the user. > > We introduce a "ui.supportcontact" option that allow such big company to redirect > their users to their own support desk. This disables all extensions blaming and > just point people to the local support in all cases. > > diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py > --- a/mercurial/dispatch.py > +++ b/mercurial/dispatch.py > @@ -333,11 +333,11 @@ def _runcatch(req): > # of date) will be clueful enough to notice the implausible > # version number and try updating. > compare = myver.split('+')[0] > ct = tuplever(compare) > worst = None, ct, '' > - if True: > + if ui.config('ui', 'supportcontact', None) is None: > for name, mod in extensions.extensions(): > testedwith = getattr(mod, 'testedwith', '') > report = getattr(mod, 'buglink', _('the extension author.')) > if not testedwith.strip(): > # We found an untested extension. It's likely the culprit. > @@ -365,13 +365,15 @@ def _runcatch(req): > '** which supports versions %s of Mercurial.\n' > '** Please disable %s and try your action again.\n' > '** If that fixes the bug please report it to %s\n') > % (name, testedwith, name, report)) > else: > + bugtracker = ui.config('ui', 'supportcontact', None) > + if bugtracker is None: > + bugtracker = _("http://mercurial.selenic.com/wiki/BugTracker") > warning = (_("** unknown exception encountered, " > - "please report by visiting\n") + > - _("** http://mercurial.selenic.com/wiki/BugTracker\n")) > + "please report by visiting\n** ") + bugtracker + '\n') > warning += ((_("** Python %s\n") % sys.version.replace('\n', '')) + > (_("** Mercurial Distributed SCM (version %s)\n") % myver) + > (_("** Extensions loaded: %s\n") % > ", ".join([x[0] for x in extensions.extensions()]))) > ui.log("commandexception", "%s\n%s\n", warning, traceback.format_exc()) > diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt > --- a/mercurial/help/config.txt > +++ b/mercurial/help/config.txt > @@ -1509,10 +1509,15 @@ User interface controls. > abbreviations. True or False. (default: False) > > ``style`` > Name of style to use for command output. > > +``supportcontact`` > + Location pointed at in Mercurial traceback for reporting crash. Use this if > + you are a large organisation with it's own Mercurial deployement process and > + crash reports should be addressed to your internal support. > + > ``timeout`` > The timeout used when a lock is held (in seconds), a negative value > means no timeout. (default: 600) > > ``traceback`` > diff --git a/tests/test-extension.t b/tests/test-extension.t > --- a/tests/test-extension.t > +++ b/tests/test-extension.t > @@ -941,10 +941,19 @@ Older extension is tested with current v > ** If that fixes the bug please report it to http://example.com/bts > ** Python * (glob) > ** Mercurial Distributed SCM (version 1.9.3) > ** Extensions loaded: throw, older > > +Ability to point to a different point > + $ hg --config extensions.throw=throw.py --config extensions.older=older.py \ > + > --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | egrep '^\*\*' > + ** unknown exception encountered, please report by visiting > + ** Your Local Goat Lenders > + ** Python * (glob) > + ** Mercurial Distributed SCM (*) (glob) > + ** Extensions loaded: throw, older > + > Declare the version as supporting this hg version, show regular bts link: > $ hgver=`$PYTHON -c 'from mercurial import util; print util.version().split("+")[0]'` > $ echo 'testedwith = """'"$hgver"'"""' >> throw.py > $ if [ -z "$hgver" ]; then > > echo "unable to fetch a mercurial version. Make sure __version__ is correct"; > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@selenic.com > https://selenic.com/mailman/listinfo/mercurial-devel
Patch
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -333,11 +333,11 @@ def _runcatch(req): # of date) will be clueful enough to notice the implausible # version number and try updating. compare = myver.split('+')[0] ct = tuplever(compare) worst = None, ct, '' - if True: + if ui.config('ui', 'supportcontact', None) is None: for name, mod in extensions.extensions(): testedwith = getattr(mod, 'testedwith', '') report = getattr(mod, 'buglink', _('the extension author.')) if not testedwith.strip(): # We found an untested extension. It's likely the culprit. @@ -365,13 +365,15 @@ def _runcatch(req): '** which supports versions %s of Mercurial.\n' '** Please disable %s and try your action again.\n' '** If that fixes the bug please report it to %s\n') % (name, testedwith, name, report)) else: + bugtracker = ui.config('ui', 'supportcontact', None) + if bugtracker is None: + bugtracker = _("http://mercurial.selenic.com/wiki/BugTracker") warning = (_("** unknown exception encountered, " - "please report by visiting\n") + - _("** http://mercurial.selenic.com/wiki/BugTracker\n")) + "please report by visiting\n** ") + bugtracker + '\n') warning += ((_("** Python %s\n") % sys.version.replace('\n', '')) + (_("** Mercurial Distributed SCM (version %s)\n") % myver) + (_("** Extensions loaded: %s\n") % ", ".join([x[0] for x in extensions.extensions()]))) ui.log("commandexception", "%s\n%s\n", warning, traceback.format_exc()) diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt --- a/mercurial/help/config.txt +++ b/mercurial/help/config.txt @@ -1509,10 +1509,15 @@ User interface controls. abbreviations. True or False. (default: False) ``style`` Name of style to use for command output. +``supportcontact`` + Location pointed at in Mercurial traceback for reporting crash. Use this if + you are a large organisation with it's own Mercurial deployement process and + crash reports should be addressed to your internal support. + ``timeout`` The timeout used when a lock is held (in seconds), a negative value means no timeout. (default: 600) ``traceback`` diff --git a/tests/test-extension.t b/tests/test-extension.t --- a/tests/test-extension.t +++ b/tests/test-extension.t @@ -941,10 +941,19 @@ Older extension is tested with current v ** If that fixes the bug please report it to http://example.com/bts ** Python * (glob) ** Mercurial Distributed SCM (version 1.9.3) ** Extensions loaded: throw, older +Ability to point to a different point + $ hg --config extensions.throw=throw.py --config extensions.older=older.py \ + > --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | egrep '^\*\*' + ** unknown exception encountered, please report by visiting + ** Your Local Goat Lenders + ** Python * (glob) + ** Mercurial Distributed SCM (*) (glob) + ** Extensions loaded: throw, older + Declare the version as supporting this hg version, show regular bts link: $ hgver=`$PYTHON -c 'from mercurial import util; print util.version().split("+")[0]'` $ echo 'testedwith = """'"$hgver"'"""' >> throw.py $ if [ -z "$hgver" ]; then > echo "unable to fetch a mercurial version. Make sure __version__ is correct";