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
--- 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