test-eol
180 lines
| 3.4 KiB
| text/plain
|
TextLexer
/ tests / test-eol
Martin Geisler
|
r11249 | #!/bin/sh | ||
cat > $HGRCPATH <<EOF | ||||
[diff] | ||||
git = True | ||||
EOF | ||||
cat > switch-eol.py <<EOF | ||||
import sys | ||||
try: | ||||
import os, msvcrt | ||||
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) | ||||
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | ||||
except ImportError: | ||||
pass | ||||
(old, new) = sys.argv[1] == 'LF' and ('\n', '\r\n') or ('\r\n', '\n') | ||||
print "%% switching encoding from %r to %r" % (old, new) | ||||
for path in sys.argv[2:]: | ||||
data = file(path, 'rb').read() | ||||
data = data.replace(old, new) | ||||
file(path, 'wb').write(data) | ||||
EOF | ||||
seteol () { | ||||
if [ $1 = "LF" ]; then | ||||
EOL='\n' | ||||
else | ||||
EOL='\r\n' | ||||
fi | ||||
} | ||||
makerepo () { | ||||
seteol $1 | ||||
echo "% setup $1 repository" | ||||
hg init repo | ||||
cd repo | ||||
cat > .hgeol <<EOF | ||||
[repository] | ||||
native = $1 | ||||
[patterns] | ||||
mixed.txt = BIN | ||||
**.txt = native | ||||
EOF | ||||
printf "first${EOL}second${EOL}third${EOL}" > a.txt | ||||
hg commit --addremove -m 'checkin' | ||||
echo | ||||
cd .. | ||||
} | ||||
dotest () { | ||||
seteol $1 | ||||
echo "% hg clone repo repo-$1" | ||||
hg clone --noupdate repo repo-$1 | ||||
cd repo-$1 | ||||
cat > .hg/hgrc <<EOF | ||||
[extensions] | ||||
eol = | ||||
[eol] | ||||
native = $1 | ||||
EOF | ||||
hg update | ||||
echo '% printrepr.py a.txt' | ||||
python $TESTDIR/printrepr.py < a.txt | ||||
echo '% hg cat a.txt' | ||||
hg cat a.txt | python $TESTDIR/printrepr.py | ||||
printf "fourth${EOL}" >> a.txt | ||||
echo '% printrepr.py a.txt' | ||||
python $TESTDIR/printrepr.py < a.txt | ||||
hg diff | python $TESTDIR/printrepr.py | ||||
python ../switch-eol.py $1 a.txt | ||||
echo '% hg diff only reports a single changed line:' | ||||
hg diff | python $TESTDIR/printrepr.py | ||||
echo "% reverting back to $1 format" | ||||
hg revert a.txt | ||||
python $TESTDIR/printrepr.py < a.txt | ||||
printf "first\r\nsecond\n" > mixed.txt | ||||
hg add mixed.txt | ||||
echo "% hg commit of inconsistent .txt file marked as binary (should work)" | ||||
hg commit -m 'binary file' | ||||
echo "% hg commit of inconsistent .txt file marked as native (should fail)" | ||||
printf "first\nsecond\r\nthird\nfourth\r\n" > a.txt | ||||
hg commit -m 'inconsistent file' | ||||
echo "% hg commit --config eol.only-consistent=False (should work)" | ||||
hg commit --config eol.only-consistent=False -m 'inconsistent file' | ||||
echo "% hg commit of binary .txt file marked as native (binary files always okay)" | ||||
printf "first${EOL}\0${EOL}third${EOL}" > a.txt | ||||
hg commit -m 'binary file' | ||||
cd .. | ||||
rm -r repo-$1 | ||||
} | ||||
makerepo LF | ||||
dotest LF | ||||
dotest CRLF | ||||
rm -r repo | ||||
makerepo CRLF | ||||
dotest LF | ||||
dotest CRLF | ||||
rm -r repo | ||||
makemixedrepo () { | ||||
echo | ||||
echo "# setup $1 repository" | ||||
hg init mixed | ||||
cd mixed | ||||
printf "foo\r\nbar\r\nbaz\r\n" > win.txt | ||||
printf "foo\nbar\nbaz\n" > unix.txt | ||||
#printf "foo\r\nbar\nbaz\r\n" > mixed.txt | ||||
hg commit --addremove -m 'created mixed files' | ||||
echo "# setting repository-native EOLs to $1" | ||||
cat > .hgeol <<EOF | ||||
[repository] | ||||
native = $1 | ||||
[patterns] | ||||
**.txt = native | ||||
EOF | ||||
hg commit --addremove -m 'added .hgeol' | ||||
cd .. | ||||
} | ||||
testmixed () { | ||||
echo | ||||
echo "% hg clone mixed mixed-$1" | ||||
hg clone mixed mixed-$1 | ||||
cd mixed-$1 | ||||
echo '% hg status (eol extension not yet activated)' | ||||
hg status | ||||
cat > .hg/hgrc <<EOF | ||||
[extensions] | ||||
eol = | ||||
[eol] | ||||
native = $1 | ||||
EOF | ||||
echo '% hg status (eol activated)' | ||||
hg status | ||||
echo '% hg commit' | ||||
hg commit -m 'synchronized EOLs' | ||||
echo '% hg status' | ||||
hg status | ||||
cd .. | ||||
rm -r mixed-$1 | ||||
} | ||||
makemixedrepo LF | ||||
testmixed LF | ||||
testmixed CRLF | ||||
rm -r mixed | ||||
makemixedrepo CRLF | ||||
testmixed LF | ||||
testmixed CRLF | ||||
rm -r mixed | ||||