##// END OF EJS Templates
merge with crew-stable
merge with crew-stable

File last commit:

r6954:f7d545a8 default
r7052:0ca4f42d merge default
Show More
alias.py
77 lines | 2.2 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
'''
from mercurial.cmdutil import findcmd, UnknownCommand, AmbiguousCommand
from mercurial import commands
Martin Geisler
i18n: mark strings for translation in alias extension
r6954 from mercurial.i18n import _
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
dispatch: move command dispatching into its own module...
r5178 self._cmd = findcmd(self._ui, self._target, commands.table)[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
except 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)
except 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
args = target.split(' ')
tcmd = args.pop(0)
if args:
Thomas Arendsen Hein
test-alias: Removed fallback to parentui, no longer needed since 10afa3fab6b4
r4964 ui.setconfig('defaults', cmd, ' '.join(args))
Brendan Cully
Add alias extension
r4801 cmdtable[cmd] = lazycommand(ui, cmd, tcmd)