tests/test-win32text
author Bryan O'Sullivan <bos@serpentine.com>
Fri, 24 Apr 2009 00:06:01 -0700
changeset 8147 441dc7becd43
parent 7226 b71a52f101dc
child 8167 6c82beaaa11a
permissions -rwxr-xr-x
win32text: be more careful about rejecting violating changesets We now try to walk changesets in reverse order from newest to oldest, so that if we see a file multiple times, we treat the newest version as canonical. This should prevent us from rejecting a changegroup that contains an unacceptable commit followed later by a commit that fixes the problem.

#!/bin/sh

hg init t
cd t

cat > unix2dos.py <<EOF
import sys

for path in sys.argv[1:]:
    data = file(path, 'rb').read()
    data = data.replace('\n', '\r\n')
    file(path, 'wb').write(data)
EOF

cat > print.py <<EOF
import sys
print(sys.stdin.read().replace('\n', '<LF>').replace('\r', '<CR>').replace('\0', '<NUL>'))
EOF

echo '[hooks]' >> .hg/hgrc
echo 'pretxncommit.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc
echo 'pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc
cat .hg/hgrc
echo

echo hello > f
hg add f
echo commit should succeed
hg ci -m 1 -d'0 0'
echo

hg clone . ../zoz
cp .hg/hgrc ../zoz/.hg

python unix2dos.py f
echo commit should fail
hg ci -m 2.1 -d'0 0'
echo

mv .hg/hgrc .hg/hgrc.bak
echo commits should succeed
hg ci -m 2 -d'0 0'
hg cp f g
hg ci -m 2.2 -d'0 0'
echo

echo push should fail
hg push ../zoz
echo

mv .hg/hgrc.bak .hg/hgrc
echo hello > f
hg rm g
echo commit should succeed
hg ci -m 2.3 -d'0 0'
echo

echo push should succeed
hg push ../zoz
echo

echo and now for something completely different
mkdir d
echo hello > d/f2
python unix2dos.py d/f2
hg add d/f2
hg ci -m 3 -d'0 0'
hg revert -a
rm d/f2
echo

hg rem f
hg ci -m 4 -d'0 0'
echo

python -c 'file("bin", "wb").write("hello\x00\x0D\x0A")'
hg add bin
hg ci -m 5 -d'0 0'
hg log -v
echo

hg clone . dupe
echo
for x in a b c d; do echo content > dupe/$x; done
hg -R dupe add
python unix2dos.py dupe/b dupe/c dupe/d
hg -R dupe ci -m a -d'0 0' dupe/a
hg -R dupe ci -m b/c -d'0 0' dupe/[bc]
hg -R dupe ci -m d -d'0 0' dupe/d
hg -R dupe log -v
echo

hg pull dupe
echo

hg log -v
echo

rm .hg/hgrc
(echo some; echo text) > f3
python -c 'file("f4.bat", "wb").write("rem empty\x0D\x0A")'
hg add f3 f4.bat
hg ci -m 6 -d'0 0'

python print.py < bin
python print.py < f3
python print.py < f4.bat
echo

echo '[extensions]' >> .hg/hgrc
echo 'win32text = ' >> .hg/hgrc
echo '[decode]' >> .hg/hgrc
echo '** = cleverdecode:' >> .hg/hgrc
echo '[encode]' >> .hg/hgrc
echo '** = cleverencode:' >> .hg/hgrc
cat .hg/hgrc
echo

rm f3 f4.bat bin
hg co 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))'
python print.py < bin
python print.py < f3
python print.py < f4.bat
echo

python -c 'file("f5.sh", "wb").write("# empty\x0D\x0A")'
hg add f5.sh
hg ci -m 7 -d'0 0'
python print.py < f5.sh
hg cat f5.sh | python print.py

echo '% just linefeed' > linefeed
hg ci -qAm 8 linefeed
python print.py < linefeed
hg cat linefeed | python print.py
hg st -q
hg revert -a linefeed
python print.py < linefeed
hg st -q
echo modified >> linefeed
hg st -q
hg revert -a
hg st -q
python print.py < linefeed

echo "# disable extension again"
echo '[decode]' >> .hg/hgrc
echo '** = !' >> .hg/hgrc
echo '[encode]' >> .hg/hgrc
echo '** = !' >> .hg/hgrc
cat .hg/hgrc
echo

rm f3 f4.bat bin
hg co 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))'
python print.py < bin
python print.py < f3
python print.py < f4.bat
echo