revset: fix infinite alias expansion detection
The alias expansion code it changed from:
1- Get replacement tree
2- Substitute arguments in the replacement tree
3- Expand the replacement tree again
into:
1- Get the replacement tree
2- Expand the replacement tree
3- Expand the arguments
4- Substitute the expanded arguments in the replacement tree
and fixes cases like:
[revsetalias]
level1($1, $2) = $1 or $2
level2($1, $2) = level1($2, $1)
$ hg log -r "level2(level1(1, 2), 3)"
where the original version incorrectly aborted on infinite expansion
error, because it was confusing the expanded aliases with their
arguments.
test --time
$ hg --time help -q help 2>&1 | grep Time > /dev/null
$ hg init a
$ cd a
test --profile
$ if "$TESTDIR/hghave" -q lsprof; then
> hg --profile st 2>../out || echo --profile failed
> grep CallCount < ../out > /dev/null || echo wrong --profile
>
> hg --profile --config profiling.output=../out st 2>&1 \
> || echo --profile + output to file failed
> grep CallCount < ../out > /dev/null \
> || echo wrong --profile output when saving to a file
>
> hg --profile --config profiling.format=text st 2>&1 \
> | grep CallCount > /dev/null || echo --profile format=text failed
>
> echo "[profiling]" >> $HGRCPATH
> echo "format=kcachegrind" >> $HGRCPATH
>
> hg --profile st 2>../out || echo --profile format=kcachegrind failed
> grep 'events: Ticks' < ../out > /dev/null || echo --profile output is wrong
>
> hg --profile --config profiling.output=../out st 2>&1 \
> || echo --profile format=kcachegrind + output to file failed
> grep 'events: Ticks' < ../out > /dev/null \
> || echo --profile output is wrong
> fi