# HG changeset patch # User Steve Losh # Date 2010-07-07 22:49:43 # Node ID 24965bb270b7d896e17bf5ce553eb0839313a79e # Parent 8bbe396883dbca71f8134a5f6f997febe8797ae6 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 $ diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1866,7 +1866,10 @@ def help_(ui, name=None, with_version=Fa 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 [] diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -208,6 +208,13 @@ class cmdalias(object): 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) diff --git a/tests/test-alias b/tests/test-alias --- a/tests/test-alias +++ b/tests/test-alias @@ -14,6 +14,7 @@ shortlog = log --template '{rev} {node|s dln = lognull --debug nousage = rollback put = export -r 0 -o "\$FOO/%R.diff" +echo = !echo [defaults] mylog = -q @@ -64,3 +65,6 @@ hg dln echo '% path expanding' FOO=`pwd` hg put cat 0.diff + +echo '% shell aliases' +hg echo foo diff --git a/tests/test-alias.out b/tests/test-alias.out --- a/tests/test-alias.out +++ b/tests/test-alias.out @@ -43,3 +43,5 @@ diff -r 000000000000 -r e63c23eaa88a foo +++ b/foo Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ +foo +% shell aliases +foo