mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
registrar: add support for storing the type of command in func object
This patch adds support for storing the type of command which is going to run in the func object. For this it does the following: 1) Add three possible values as attributes to the registrar.command class 2) Add a new argument to registrar.command._doregister function 3) Add a new attribute cmdtype to the func object The type of command will be helpful in deciding what level of access on hidden commits it can has. Differential Revision: https://phab.mercurial-scm.org/D736
This commit is contained in:
parent
5cbb2943df
commit
aaa435b086
@ -35,11 +35,14 @@ from . import (
|
||||
hook,
|
||||
profiling,
|
||||
pycompat,
|
||||
registrar,
|
||||
scmutil,
|
||||
ui as uimod,
|
||||
util,
|
||||
)
|
||||
|
||||
unrecoverablewrite = registrar.command.unrecoverablewrite
|
||||
|
||||
class request(object):
|
||||
def __init__(self, args, ui=None, repo=None, fin=None, fout=None,
|
||||
ferr=None, prereposetups=None):
|
||||
@ -495,7 +498,7 @@ class cmdalias(object):
|
||||
return aliasargs(self.fn, args)
|
||||
|
||||
def __getattr__(self, name):
|
||||
adefaults = {r'norepo': True,
|
||||
adefaults = {r'norepo': True, r'cmdtype': unrecoverablewrite,
|
||||
r'optionalrepo': False, r'inferrepo': False}
|
||||
if name not in adefaults:
|
||||
raise AttributeError(name)
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
from .i18n import _
|
||||
from . import (
|
||||
configitems,
|
||||
error,
|
||||
@ -131,13 +132,35 @@ class command(_funcregistrarbase):
|
||||
command line arguments. If True, arguments will be examined for potential
|
||||
repository locations. See ``findrepo()``. If a repository is found, it
|
||||
will be used.
|
||||
|
||||
There are three constants in the class which tells what type of the command
|
||||
that is. That information will be helpful at various places. It will be also
|
||||
be used to decide what level of access the command has on hidden commits.
|
||||
The constants are:
|
||||
|
||||
unrecoverablewrite is for those write commands which can't be recovered like
|
||||
push.
|
||||
recoverablewrite is for write commands which can be recovered like commit.
|
||||
readonly is for commands which are read only.
|
||||
"""
|
||||
|
||||
unrecoverablewrite = "unrecoverable"
|
||||
recoverablewrite = "recoverable"
|
||||
readonly = "readonly"
|
||||
|
||||
def _doregister(self, func, name, options=(), synopsis=None,
|
||||
norepo=False, optionalrepo=False, inferrepo=False):
|
||||
norepo=False, optionalrepo=False, inferrepo=False,
|
||||
cmdtype=unrecoverablewrite):
|
||||
|
||||
possiblecmdtypes = set([self.unrecoverablewrite, self.recoverablewrite,
|
||||
self.readonly])
|
||||
if cmdtype not in possiblecmdtypes:
|
||||
raise error.ProgrammingError(_("unknown cmdtype value '%s' for "
|
||||
"'%s' command") % (cmdtype, name))
|
||||
func.norepo = norepo
|
||||
func.optionalrepo = optionalrepo
|
||||
func.inferrepo = inferrepo
|
||||
func.cmdtype = cmdtype
|
||||
if synopsis:
|
||||
self._table[name] = func, list(options), synopsis
|
||||
else:
|
||||
|
Loading…
Reference in New Issue
Block a user