1#!/bin/sh
2
3test_description='CRLF conversion'
4
5. ./test-lib.sh
6
7append_cr () {
8 sed -e 's/$/Q/' | tr Q '\015'
9}
10
11remove_cr () {
12 tr '\015' Q <"$1" | grep Q >/dev/null &&
13 tr '\015' Q <"$1" | sed -ne 's/Q$//p'
14}
15
16test_expect_success setup '
17
18 git repo-config core.autocrlf false &&
19
20 for w in Hello world how are you; do echo $w; done >one &&
21 mkdir dir &&
22 for w in I am very very fine thank you; do echo $w; done >dir/two &&
23 git add . &&
24
25 git commit -m initial &&
26
27 one=`git rev-parse HEAD:one` &&
28 dir=`git rev-parse HEAD:dir` &&
29 two=`git rev-parse HEAD:dir/two` &&
30
31 for w in Some extra lines here; do echo $w; done >>one &&
32 git diff >patch.file &&
33 patched=`git hash-object --stdin <one` &&
34 git read-tree --reset -u HEAD &&
35
36 echo happy.
37'
38
39test_expect_success 'update with autocrlf=input' '
40
41 rm -f tmp one dir/two &&
42 git read-tree --reset -u HEAD &&
43 git repo-config core.autocrlf input &&
44
45 for f in one dir/two
46 do
47 append_cr <$f >tmp && mv -f tmp $f &&
48 git update-index -- $f || {
49 echo Oops
50 false
51 break
52 }
53 done &&
54
55 differs=`git diff-index --cached HEAD` &&
56 test -z "$differs" || {
57 echo Oops "$differs"
58 false
59 }
60
61'
62
63test_expect_success 'update with autocrlf=true' '
64
65 rm -f tmp one dir/two &&
66 git read-tree --reset -u HEAD &&
67 git repo-config core.autocrlf true &&
68
69 for f in one dir/two
70 do
71 append_cr <$f >tmp && mv -f tmp $f &&
72 git update-index -- $f || {
73 echo "Oops $f"
74 false
75 break
76 }
77 done &&
78
79 differs=`git diff-index --cached HEAD` &&
80 test -z "$differs" || {
81 echo Oops "$differs"
82 false
83 }
84
85'
86
87test_expect_success 'checkout with autocrlf=true' '
88
89 rm -f tmp one dir/two &&
90 git repo-config core.autocrlf true &&
91 git read-tree --reset -u HEAD &&
92
93 for f in one dir/two
94 do
95 remove_cr "$f" >tmp && mv -f tmp $f &&
96 git update-index -- $f || {
97 echo "Eh? $f"
98 false
99 break
100 }
101 done &&
102 test "$one" = `git hash-object --stdin <one` &&
103 test "$two" = `git hash-object --stdin <dir/two` &&
104 differs=`git diff-index --cached HEAD` &&
105 test -z "$differs" || {
106 echo Oops "$differs"
107 false
108 }
109'
110
111test_expect_success 'checkout with autocrlf=input' '
112
113 rm -f tmp one dir/two &&
114 git repo-config core.autocrlf input &&
115 git read-tree --reset -u HEAD &&
116
117 for f in one dir/two
118 do
119 if remove_cr "$f" >/dev/null
120 then
121 echo "Eh? $f"
122 false
123 break
124 else
125 git update-index -- $f
126 fi
127 done &&
128 test "$one" = `git hash-object --stdin <one` &&
129 test "$two" = `git hash-object --stdin <dir/two` &&
130 differs=`git diff-index --cached HEAD` &&
131 test -z "$differs" || {
132 echo Oops "$differs"
133 false
134 }
135'
136
137test_expect_success 'apply patch (autocrlf=input)' '
138
139 rm -f tmp one dir/two &&
140 git repo-config core.autocrlf input &&
141 git read-tree --reset -u HEAD &&
142
143 git apply patch.file &&
144 test "$patched" = "`git hash-object --stdin <one`" || {
145 echo "Eh? apply without index"
146 false
147 }
148'
149
150test_expect_success 'apply patch --cached (autocrlf=input)' '
151
152 rm -f tmp one dir/two &&
153 git repo-config core.autocrlf input &&
154 git read-tree --reset -u HEAD &&
155
156 git apply --cached patch.file &&
157 test "$patched" = `git rev-parse :one` || {
158 echo "Eh? apply with --cached"
159 false
160 }
161'
162
163test_expect_success 'apply patch --index (autocrlf=input)' '
164
165 rm -f tmp one dir/two &&
166 git repo-config core.autocrlf input &&
167 git read-tree --reset -u HEAD &&
168
169 git apply --index patch.file &&
170 test "$patched" = `git rev-parse :one` &&
171 test "$patched" = `git hash-object --stdin <one` || {
172 echo "Eh? apply with --index"
173 false
174 }
175'
176
177test_expect_success 'apply patch (autocrlf=true)' '
178
179 rm -f tmp one dir/two &&
180 git repo-config core.autocrlf true &&
181 git read-tree --reset -u HEAD &&
182
183 # Sore thumb
184 remove_cr one >tmp && mv -f tmp one &&
185
186 git apply patch.file &&
187 test "$patched" = "`git hash-object --stdin <one`" || {
188 echo "Eh? apply without index"
189 false
190 }
191'
192
193test_expect_success 'apply patch --cached (autocrlf=true)' '
194
195 rm -f tmp one dir/two &&
196 git repo-config core.autocrlf true &&
197 git read-tree --reset -u HEAD &&
198
199 git apply --cached patch.file &&
200 test "$patched" = `git rev-parse :one` || {
201 echo "Eh? apply without index"
202 false
203 }
204'
205
206test_done