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
$
--- 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
--- a/tests/test-alias.out Wed Jul 07 14:29:40 2010 +0200
+++ b/tests/test-alias.out Wed Jul 07 18:49:43 2010 -0400
@@ -43,3 +43,5 @@
+++ b/foo Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+foo
+% shell aliases
+foo