diff tests/test-eol @ 11249:0bb67503ad4b stable

eol: extension for managing file EOLs
author Martin Geisler <mg@lazybytes.net>
date Mon, 31 May 2010 21:37:01 +0200
parents
children
line wrap: on
line diff
--- /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
+