--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-eol Mon May 31 21:37:01 2010 +0200
@@ -0,0 +1,180 @@
+#!/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
+