Mercurial > public > mercurial-scm > hg-stable
diff mercurial/dispatch.py @ 14265:e4ab5ae193f2
add positional arguments to non-shell aliases
author | Alexander Solovyov <alexander@solovyov.net> |
---|---|
date | Sun, 01 May 2011 12:29:32 +0200 |
parents | dea93484cf9f |
children | 005a540e9aee |
line wrap: on
line diff
--- a/mercurial/dispatch.py Sat May 07 21:01:15 2011 +0300 +++ b/mercurial/dispatch.py Sun May 01 12:29:32 2011 +0200 @@ -182,10 +182,21 @@ return -1 -def aliasargs(fn): - if hasattr(fn, 'args'): - return fn.args - return [] +def aliasargs(fn, givenargs): + args = getattr(fn, 'args', []) + if args and givenargs: + cmd = ' '.join(map(util.shellquote, args)) + + nums = [] + def replacer(m): + num = int(m.group(1)) - 1 + nums.append(num) + return givenargs[num] + cmd = re.sub(r'\$(\d+|\$)', replacer, cmd) + givenargs = [x for i, x in enumerate(givenargs) + if i not in nums] + args = shlex.split(cmd) + return args + givenargs class cmdalias(object): def __init__(self, name, definition, cmdtable): @@ -263,7 +274,7 @@ else: self.fn, self.opts = tableentry - self.args = aliasargs(self.fn) + args + self.args = aliasargs(self.fn, args) if cmd not in commands.norepo.split(' '): self.norepo = False if self.help.startswith("hg " + cmd): @@ -330,7 +341,7 @@ aliases, entry = cmdutil.findcmd(cmd, commands.table, ui.config("ui", "strict")) cmd = aliases[0] - args = aliasargs(entry[0]) + args + args = aliasargs(entry[0], args) defaults = ui.config("defaults", cmd) if defaults: args = map(util.expandpath, shlex.split(defaults)) + args