1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 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
|