Mercurial > hg
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 +