diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -488,7 +488,7 @@ return aliasargs(self.fn, args) def __getattr__(self, name): - adefaults = {r'norepo': True, + adefaults = {r'norepo': True, r'cmdtype': 'unrecoverable', r'optionalrepo': False, r'inferrepo': False} if name not in adefaults: raise AttributeError(name) diff --git a/mercurial/registrar.py b/mercurial/registrar.py --- a/mercurial/registrar.py +++ b/mercurial/registrar.py @@ -7,6 +7,8 @@ from __future__ import absolute_import +from .i18n import _ + from . import ( configitems, error, @@ -149,9 +151,14 @@ def _doregister(self, func, name, options=(), synopsis=None, norepo=False, optionalrepo=False, inferrepo=False, cmdtype=cmdtype.UNRECOVERABLE_WRITE): + possiblecmdtypes = set(['unrecoverable', 'recoverable', 'readonly']) func.norepo = norepo func.optionalrepo = optionalrepo func.inferrepo = inferrepo + if cmdtype not in possiblecmdtypes: + raise error.ProgrammingError(_("unknown cmdtype value '%s' for " + "'%s' command") % (cmdtype, name)) + func.cmdtype = cmdtype if synopsis: self._table[name] = func, list(options), synopsis else: