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:...:"