Mercurial > hg
view tests/test-update-branches @ 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 | ea8c207a0f78 |
children |
line wrap: on
line source
#!/bin/sh # Construct the following history tree: # # @ 5:e1bb631146ca b1 # | # o 4:a4fdb3b883c4 0:b608b9236435 b1 # | # | o 3:4b57d2520816 1:44592833ba9f # | | # | | o 2:063f31070f65 # | |/ # | o 1:44592833ba9f # |/ # o 0:b608b9236435 hg init echo foo > foo echo zero > a hg ci -qAm0 echo one > a ; hg ci -m1 echo two > a ; hg ci -m2 hg up -q 1 echo three > a ; hg ci -qm3 hg up -q 0 hg branch -q b1 echo four > a ; hg ci -qm4 echo five > a ; hg ci -qm5 echo % initial repo state echo hg --config 'extensions.graphlog=' \ glog --template '{rev}:{node|short} {parents} {branches}\n' # Test helper functions. revtest () { msg=$1 dirtyflag=$2 # 'clean' or 'dirty' startrev=$3 targetrev=$4 opt=$5 echo % revtest $msg $startrev $targetrev hg up -qC $startrev test $dirtyflag = dirty && echo dirty > foo hg up $opt $targetrev hg parent --template 'parent={rev}\n' hg stat } norevtest () { msg=$1 dirtyflag=$2 # 'clean' or 'dirty' startrev=$3 opt=$4 echo % norevtest $msg $startrev hg up -qC $startrev test $dirtyflag = dirty && echo dirty > foo hg up $opt hg parent --template 'parent={rev}\n' hg stat } # Test cases are documented in a table in the update function of merge.py. # Cases are run as shown in that table, row by row. norevtest 'none clean linear' clean 4 norevtest 'none clean same' clean 2 revtest 'none clean linear' clean 1 2 revtest 'none clean same' clean 2 3 revtest 'none clean cross' clean 3 4 revtest 'none dirty linear' dirty 1 2 revtest 'none dirty same' dirty 2 3 revtest 'none dirty cross' dirty 3 4 revtest '-C dirty linear' dirty 1 2 -C revtest '-c dirty linear' dirty 1 2 -c norevtest '-c clean same' clean 2 -c revtest '-cC dirty linear' dirty 1 2 -cC