Mercurial > public > mercurial-scm > hg-stable
diff mercurial/dispatch.py @ 8655:21688b8a594b
Move alias into core
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Sat, 30 May 2009 11:32:23 -0700 |
parents | 991ca609ccd6 |
children | eb7b247a98ea 62e3b9466700 |
line wrap: on
line diff
--- a/mercurial/dispatch.py Sat May 30 19:37:01 2009 +0200 +++ b/mercurial/dispatch.py Sat May 30 11:32:23 2009 -0700 @@ -161,6 +161,74 @@ return p +def aliasargs(fn): + if hasattr(fn, 'args'): + return fn.args + return [] + +class cmdalias(object): + def __init__(self, name, definition, cmdtable): + self.name = name + self.definition = definition + self.args = [] + self.opts = [] + self.help = '' + self.norepo = True + + try: + cmdutil.findcmd(self.name, cmdtable, True) + self.shadows = True + except error.UnknownCommand: + self.shadows = False + + if not self.definition: + def fn(ui, *args): + ui.warn(_("no definition for alias '%s'\n") % self.name) + return 1 + self.fn = fn + + return + + args = shlex.split(self.definition) + cmd = args.pop(0) + opts = [] + help = '' + + try: + self.fn, self.opts, self.help = cmdutil.findcmd(cmd, cmdtable, False)[1] + self.args = aliasargs(self.fn) + args + if cmd not in commands.norepo.split(' '): + self.norepo = False + except error.UnknownCommand: + def fn(ui, *args): + ui.warn(_("alias '%s' resolves to unknown command '%s'\n") \ + % (self.name, cmd)) + return 1 + self.fn = fn + except error.AmbiguousCommand: + def fn(ui, *args): + ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \ + % (self.name, cmd)) + return 1 + self.fn = fn + + def __call__(self, ui, *args, **opts): + if self.shadows: + ui.debug(_("alias '%s' shadows command\n") % self.name) + + return self.fn(ui, *args, **opts) + +def addaliases(ui, cmdtable): + # aliases are processed after extensions have been loaded, so they + # may use extension commands. Aliases can also use other alias definitions, + # but only if they have been defined prior to the current definition. + for alias, definition in ui.configitems('alias'): + aliasdef = cmdalias(alias, definition, cmdtable) + + cmdtable[alias] = (aliasdef, aliasdef.opts, aliasdef.help) + if aliasdef.norepo: + commands.norepo += ' %s' % alias + def _parse(ui, args): options = {} cmdoptions = {} @@ -175,6 +243,7 @@ aliases, i = cmdutil.findcmd(cmd, commands.table, ui.config("ui", "strict")) cmd = aliases[0] + args = aliasargs(i[0]) + args defaults = ui.config("defaults", cmd) if defaults: args = shlex.split(defaults) + args @@ -301,6 +370,9 @@ % (name, " ".join(overrides))) commands.table.update(cmdtable) _loaded.add(name) + + addaliases(lui, commands.table) + # check for fallback encoding fallback = lui.config('ui', 'fallbackencoding') if fallback: