Mercurial > hg
changeset 11524:24965bb270b7
dispatch: add shell aliases
This patch adds git-style "shell aliases" to Mercurial.
Any alias with a definition beginning with a '!' will be treated as a shell
alias. For example:
[alias]
echo = !echo
qempty = !hg qrefresh -X "`hg root`" ; echo Emptied patch "`hg qtop`"
$ hg echo foo
foo
$ hg qempty
Emptied patch foo
$
author | Steve Losh <steve@stevelosh.com> |
---|---|
date | Wed, 07 Jul 2010 18:49:43 -0400 |
parents | 8bbe396883db |
children | f4eddec324b7 |
files | mercurial/commands.py mercurial/dispatch.py tests/test-alias tests/test-alias.out |
diffstat | 4 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Wed Jul 07 14:29:40 2010 +0200 +++ b/mercurial/commands.py Wed Jul 07 18:49:43 2010 -0400 @@ -1866,7 +1866,10 @@ if not doc: doc = _("(no help text available)") if hasattr(entry[0], 'definition'): # aliased command - doc = _('alias for: hg %s\n\n%s') % (entry[0].definition, doc) + if entry[0].definition.startswith('!'): # shell alias + doc = _('shell alias for::\n\n %s') % entry[0].definition[1:] + else: + doc = _('alias for: hg %s\n\n%s') % (entry[0].definition, doc) if ui.quiet: doc = doc.splitlines()[0] keep = ui.verbose and ['verbose'] or []
--- a/mercurial/dispatch.py Wed Jul 07 14:29:40 2010 +0200 +++ b/mercurial/dispatch.py Wed Jul 07 18:49:43 2010 -0400 @@ -208,6 +208,13 @@ return + if self.definition.startswith('!'): + def fn(ui, *args): + cmd = '%s %s' % (self.definition[1:], ' '.join(args)) + return util.system(cmd) + self.fn = fn + return + args = shlex.split(self.definition) cmd = args.pop(0) args = map(util.expandpath, args)
--- a/tests/test-alias Wed Jul 07 14:29:40 2010 +0200 +++ b/tests/test-alias Wed Jul 07 18:49:43 2010 -0400 @@ -14,6 +14,7 @@ dln = lognull --debug nousage = rollback put = export -r 0 -o "\$FOO/%R.diff" +echo = !echo [defaults] mylog = -q @@ -64,3 +65,6 @@ echo '% path expanding' FOO=`pwd` hg put cat 0.diff + +echo '% shell aliases' +hg echo foo