#!/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