view tests/test-record @ 12252:4481f8a93c7a stable

convert/darcs: handle non-ASCII metadata in darcs changelog (issue2354) Given a commit author or message with non-ASCII characters in a darcs repo, convert would raise a UnicodeEncodeError when adding changesets to the hg changelog. This happened because etree returns back unicode objects for any text it can't encode into ASCII. convert was passing these objects to changelog.add(), which would then attempt encoding.fromlocal() on them. This patch ensures converter_source.recode() is called on each piece of commit data returned by etree. (Also note that darcs is currently encoding agnostic and will print out whatever is in a patch's metadata byte-for-byte, even in the XML changelog.)
author Brodie Rao <brodie@bitheap.org>
date Fri, 10 Sep 2010 09:30:50 -0500
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