##// END OF EJS Templates
mq: new method invalidate...
mq: new method invalidate Introduce method invalidate (similar to dirstate and repo).

File last commit:

r8519:5fbee915 default
r8525:b169ba60 default
Show More
alias.py
80 lines | 2.4 KiB | text/x-python | PythonLexer
Brendan Cully
Add alias extension
r4801 # Copyright (C) 2007 Brendan Cully <brendan@kublai.com>
# This file is published under the GNU GPL.
'''allow user-defined command aliases
To use, create entries in your hgrc of the form
[alias]
mycmd = cmd --args
'''
Martin Geisler
i18n: mark strings for translation in alias extension
r6954 from mercurial.i18n import _
Matt Mackall
error: move UnknownCommand and AmbiguousCommand
r7643 from mercurial import commands, cmdutil, error
Brendan Cully
Add alias extension
r4801
cmdtable = {}
class RecursiveCommand(Exception): pass
class lazycommand(object):
'''defer command lookup until needed, so that extensions loaded
after alias can be aliased'''
def __init__(self, ui, name, target):
self._ui = ui
self._name = name
self._target = target
self._cmd = None
def __len__(self):
self._resolve()
return len(self._cmd)
def __getitem__(self, key):
self._resolve()
return self._cmd[key]
def __iter__(self):
self._resolve()
return self._cmd.__iter__()
def _resolve(self):
if self._cmd is not None:
return
try:
Matt Mackall
error: move UnknownCommand and AmbiguousCommand
r7643 self._cmd = cmdutil.findcmd(self._target, commands.table, False)[1]
Brendan Cully
Add alias extension
r4801 if self._cmd == self:
raise RecursiveCommand()
if self._target in commands.norepo.split(' '):
commands.norepo += ' %s' % self._name
return
Matt Mackall
error: move UnknownCommand and AmbiguousCommand
r7643 except error.UnknownCommand:
Martin Geisler
i18n: mark strings for translation in alias extension
r6954 msg = _('*** [alias] %s: command %s is unknown') % \
Brendan Cully
Add alias extension
r4801 (self._name, self._target)
Matt Mackall
error: move UnknownCommand and AmbiguousCommand
r7643 except error.AmbiguousCommand:
Martin Geisler
i18n: mark strings for translation in alias extension
r6954 msg = _('*** [alias] %s: command %s is ambiguous') % \
Brendan Cully
Add alias extension
r4801 (self._name, self._target)
except RecursiveCommand:
Martin Geisler
i18n: mark strings for translation in alias extension
r6954 msg = _('*** [alias] %s: circular dependency on %s') % \
Brendan Cully
Add alias extension
r4801 (self._name, self._target)
def nocmd(*args, **opts):
self._ui.warn(msg + '\n')
return 1
nocmd.__doc__ = msg
self._cmd = (nocmd, [], '')
commands.norepo += ' %s' % self._name
def uisetup(ui):
for cmd, target in ui.configitems('alias'):
if not target:
Martin Geisler
i18n: mark strings for translation in alias extension
r6954 ui.warn(_('*** [alias] %s: no definition\n') % cmd)
Brendan Cully
Add alias extension
r4801 continue
Benoit Boissinot
alias: a0104303f400 did not correctly handle whitespace in the args
r8519 args = target.split(' ', 1)
Brendan Cully
Add alias extension
r4801 tcmd = args.pop(0)
if args:
Benoit Boissinot
alias: a0104303f400 did not correctly handle whitespace in the args
r8519 args = args[0]
Benoit Boissinot
alias: honor the [defaults] section, fix issue1642
r8477 defaults = ui.config('defaults', cmd)
if defaults:
Benoit Boissinot
alias: a0104303f400 did not correctly handle whitespace in the args
r8519 args = ' '.join((args, defaults))
ui.setconfig('defaults', cmd, args)
Brendan Cully
Add alias extension
r4801 cmdtable[cmd] = lazycommand(ui, cmd, tcmd)