Mercurial > hg
view tests/test-hgrc @ 11989:f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
This patch changes the functionality of shell aliases to add more powerful
options for working with shell alias arguments.
First: the alias name + arguments to a shell alias are set as an HG_ARGS
environment variable, delimited by spaces. This matches the behavior of hooks.
Second: any occurrences of "$@" (without quotes) are replaced with the
arguments, separated by spaces. This happens *before* the alias gets to the shell.
Third: any positive numeric variables ("$1", "$2", etc) are replaced with the
appropriate argument, indexed from 1. "$0" is replaced with the name of the
alias. Any "extra" numeric variables are replaced with an empty string. This
happens *before* the alias gets to the shell.
These changes allow for more flexible shell aliases:
[alias]
echo = !echo $@
count = !hg log -r "$@" --template='.' | wc -c | sed -e 's/ //g'
qqueuemv = !mv "`hg root`/.hg/patches-$1" "`hg root`/.hg/patches-$2"
In action:
$ hg echo foo
foo
$ hg count 'branch(default)'
901
$ hg count 'branch(stable) and keyword(fixes)'
102
$ hg qqueuemv myfeature somefeature
author | Steve Losh <steve@stevelosh.com> |
---|---|
date | Wed, 18 Aug 2010 18:56:44 -0400 |
parents | d6dbd5e4ee72 |
children |
line wrap: on
line source
#!/bin/sh echo "invalid" > $HGRCPATH hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|" echo "" > $HGRCPATH # issue1199: escaping hg init "foo%bar" hg clone "foo%bar" foobar p=`pwd` cd foobar cat .hg/hgrc | sed -e "s:$p:...:" hg paths | sed -e "s:$p:...:" hg showconfig | sed -e "s:$p:...:" cd .. # issue1829: wrong indentation echo '[foo]' > $HGRCPATH echo ' x = y' >> $HGRCPATH hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|" python -c "print '[foo]\nbar = a\n b\n c \n de\n fg \nbaz = bif cb \n'" \ > $HGRCPATH hg showconfig foo FAKEPATH=/path/to/nowhere export FAKEPATH echo '%include $FAKEPATH/no-such-file' > $HGRCPATH hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|" unset FAKEPATH echo "% username expansion" olduser=$HGUSER unset HGUSER FAKEUSER='John Doe' export FAKEUSER echo '[ui]' > $HGRCPATH echo 'username = $FAKEUSER' >> $HGRCPATH hg init usertest cd usertest touch bar hg commit --addremove --quiet -m "added bar" hg log --template "{author}\n" cd .. hg showconfig | sed -e "s:$p:...:" unset FAKEUSER HGUSER=$olduser export HGUSER # HGPLAIN cd .. p=`pwd` echo "[ui]" > $HGRCPATH echo "debug=true" >> $HGRCPATH echo "fallbackencoding=ASCII" >> $HGRCPATH echo "quiet=true" >> $HGRCPATH echo "slash=true" >> $HGRCPATH echo "traceback=true" >> $HGRCPATH echo "verbose=true" >> $HGRCPATH echo "style=~/.hgstyle" >> $HGRCPATH echo "logtemplate={node}" >> $HGRCPATH echo "[defaults]" >> $HGRCPATH echo "identify=-n" >> $HGRCPATH echo "[alias]" >> $HGRCPATH echo "log=log -g" >> $HGRCPATH echo '% customized hgrc' hg showconfig | sed -e "s:$p:...:" echo '% plain hgrc' HGPLAIN=; export HGPLAIN hg showconfig --config ui.traceback=True --debug | sed -e "s:$p:...:"