sapling/hgext/hiddenerror.py
Jun Wu f7228afd10 chg: drop "sensitive config sections"
Summary:
The "sensitive config sections" was used because "hg serve" loading
different extensions are incompatible with each other. Now we neither load
extensions nor run their uisetups, and just use one chg server.  So
sensitive config sections can be removed.

Reviewed By: singhsrb

Differential Revision: D7847149

fbshipit-source-id: 758c1df21d280bf0f88d91432e1201c8417df532
2018-05-08 17:02:22 -07:00

66 lines
2.0 KiB
Python

# hiddenerror.py
#
# Copyright 2017 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""configurable error messages for accessing hidden changesets
Set the following configuration options to customize the error message
seen when the user attempts to access a hidden changeset::
[hiddenerror]
message = my custom message
hint = my custom hint
The message and hint can contain an optional `{0}` which will be substituted
with the hash of the hidden changeset.
"""
from __future__ import absolute_import
from mercurial.node import short
from mercurial.i18n import _
from mercurial import (
context,
error,
extensions,
)
testedwith = 'ships-with-fb-hgext'
def uisetup(ui):
"""Wrap context.changectx to catch FilteredRepoLookupError."""
# Get the error messages from the user's configuration and substitute the
# hash in.
msgfmt, hintfmt = _getstrings(ui)
def _filterederror(orig, repo, rev):
# If the number is beyond the changelog, it's a short hash that
# just happened to be a number.
intrev = None
try:
intrev = int(rev)
except ValueError:
pass
if intrev is not None and intrev < len(repo):
node = repo.unfiltered()[rev].node()
shorthash = short(node)
msg = msgfmt.format(shorthash)
hint = hintfmt and hintfmt.format(shorthash)
return error.FilteredRepoLookupError(msg, hint=hint)
return orig(repo, rev)
extensions.wrapfunction(context, '_filterederror', _filterederror)
def _getstrings(ui):
"""Lood the error messages to show when the user tries to access a
hidden commit from the user's configuration file. Fall back to
default messages if nothing is configured.
"""
msg = ui.config('hiddenerror', 'message')
hint = ui.config('hiddenerror', 'hint')
if not msg:
msg = _("hidden changeset {0}")
return msg, hint