view tests/test-record @ 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 a5922547b5cc
children
line wrap: on
line source

#!/bin/sh

echo "[ui]" >> $HGRCPATH
echo "interactive=true" >> $HGRCPATH
echo "[extensions]" >> $HGRCPATH
echo "record=" >> $HGRCPATH

echo % help

hg help record

hg init a
cd a

echo % select no files

touch empty-rw
hg add empty-rw
hg record empty-rw<<EOF
n
EOF
echo; hg tip -p

echo % select files but no hunks

hg record empty-rw<<EOF
y
n
EOF
echo; hg tip -p

echo % record empty file

hg record -d '0 0' -m empty empty-rw<<EOF
y
y
EOF
echo; hg tip -p

echo % summary shows we updated to the new cset
hg summary
echo

echo % rename empty file

hg mv empty-rw empty-rename
hg record -d '1 0' -m rename<<EOF
y
EOF
echo; hg tip -p

echo % copy empty file

hg cp empty-rename empty-copy
hg record -d '2 0' -m copy<<EOF
y
EOF
echo; hg tip -p

echo % delete empty file

hg rm empty-copy
hg record -d '3 0' -m delete<<EOF
y
EOF
echo; hg tip -p

echo % add binary file

hg bundle --base -2 tip.bundle
hg add tip.bundle
hg record -d '4 0' -m binary<<EOF
y
EOF
echo; hg tip -p

echo % change binary file

hg bundle --base -2 tip.bundle
hg record -d '5 0' -m binary-change<<EOF
y
EOF
echo; hg tip -p

echo % rename and change binary file

hg mv tip.bundle top.bundle
hg bundle --base -2 top.bundle
hg record -d '6 0' -m binary-change-rename<<EOF
y
EOF
echo; hg tip -p

echo % add plain file

for i in 1 2 3 4 5 6 7 8 9 10; do
    echo $i >> plain
done

hg add plain
hg record -d '7 0' -m plain plain<<EOF
y
y
EOF
echo; hg tip -p

echo % modify end of plain file

echo 11 >> plain
hg record -d '8 0' -m end plain <<EOF
y
y
EOF

echo % modify end of plain file, no EOL

hg tip --template '{node}' >> plain
hg record -d '9 0' -m noeol plain <<EOF
y
y
EOF

echo % modify end of plain file, add EOL

echo >> plain
hg record -d '10 0' -m eol plain <<EOF
y
y
y
EOF

echo % modify beginning, trim end, record both

rm plain
for i in 2 2 3 4 5 6 7 8 9 10; do
  echo $i >> plain
done

hg record -d '10 0' -m begin-and-end plain <<EOF
y
y
y
EOF
echo; hg tip -p

echo % trim beginning, modify end

rm plain
for i in 4 5 6 7 8 9 10.new; do
  echo $i >> plain
done

echo % record end

hg record -d '11 0' -m end-only plain <<EOF
y
n
y
EOF
echo; hg tip -p

echo % record beginning

hg record -d '12 0' -m begin-only plain <<EOF
y
y
EOF
echo; hg tip -p

echo % add to beginning, trim from end

rm plain
for i in 1 2 3 4 5 6 7 8 9; do
  echo $i >> plain
done

echo % record end

hg record --traceback -d '13 0' -m end-again plain<<EOF
y
n
y
EOF

echo % add to beginning, middle, end

rm plain
for i in 1 2 3 4 5 5.new 5.reallynew 6 7 8 9 10 11; do
  echo $i >> plain
done

echo % record beginning, middle

hg record -d '14 0' -m middle-only plain <<EOF
y
y
y
n
EOF
echo; hg tip -p

echo % record end

hg record -d '15 0' -m end-only plain <<EOF
y
y
EOF
echo; hg tip -p

mkdir subdir
cd subdir
echo a > a
hg ci -d '16 0' -Amsubdir

echo a >> a
hg record -d '16 0' -m subdir-change a <<EOF
y
y
EOF
echo; hg tip -p

echo a > f1
echo b > f2
hg add f1 f2

hg ci -mz -d '17 0'

echo a >> f1
echo b >> f2

echo % help, quit

hg record <<EOF
?
q
EOF

echo % skip

hg record <<EOF
s
EOF

echo % no

hg record <<EOF
n
EOF

echo % f, quit

hg record <<EOF
f
q
EOF

echo % s, all

hg record -d '18 0' -mx <<EOF
s
a
EOF
echo; hg tip -p

echo % f

hg record -d '19 0' -my <<EOF
f
EOF
echo; hg tip -p

echo % preserve chmod +x

chmod +x f1
echo a >> f1
hg record -d '20 0' -mz <<EOF
y
y
y
EOF
echo; hg tip --config diff.git=True -p

echo % preserve execute permission on original

echo b >> f1
hg record -d '21 0' -maa <<EOF
y
y
y
EOF
echo; hg tip --config diff.git=True -p

echo % preserve chmod -x

chmod -x f1
echo c >> f1
hg record -d '22 0' -mab <<EOF
y
y
y
EOF
echo; hg tip --config diff.git=True -p

cd ..

echo % abort early when a merge is in progress
hg up 4
touch iwillmergethat
hg add iwillmergethat
hg branch thatbranch
hg ci -m'new head'
hg up default
hg merge thatbranch
echo; hg record -m'will abort'
hg up -C

echo % with win32ext
echo '[extensions]' >> .hg/hgrc
echo 'win32text = ' >> .hg/hgrc
echo '[decode]' >> .hg/hgrc
echo '** = cleverdecode:' >> .hg/hgrc
echo '[encode]' >> .hg/hgrc
echo '** = cleverencode:' >> .hg/hgrc
echo '[patch]' >> .hg/hgrc
echo 'eol = crlf' >> .hg/hgrc

echo d >> subdir/f1
hg record -d '23 0' -mw1 <<EOF
y
y
EOF
echo; hg tip -p