# HG changeset patch # User Steve Losh # Date 1278542983 14400 # 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 -r 8bbe396883db -r 24965bb270b7 mercurial/commands.py --- 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 [] diff -r 8bbe396883db -r 24965bb270b7 mercurial/dispatch.py --- 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) diff -r 8bbe396883db -r 24965bb270b7 tests/test-alias --- 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 diff -r 8bbe396883db -r 24965bb270b7 tests/test-alias.out --- 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