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