]> git.ipfire.org Git - thirdparty/git.git/blame - t/t4027-diff-submodule.sh
branch.c: Relax unnecessary requirement on upstream's remote ref name
[thirdparty/git.git] / t / t4027-diff-submodule.sh
CommitLineData
2b459b48
JH
1#!/bin/sh
2
3test_description='difference in submodules'
4
5. ./test-lib.sh
bfdbee98 6. "$TEST_DIRECTORY"/diff-lib.sh
2b459b48 7
2b459b48
JH
8test_expect_success setup '
9 test_tick &&
10 test_create_repo sub &&
11 (
12 cd sub &&
13 echo hello >world &&
14 git add world &&
15 git commit -m submodule
16 ) &&
17
18 test_tick &&
19 echo frotz >nitfol &&
20 git add nitfol sub &&
21 git commit -m superproject &&
22
23 (
24 cd sub &&
25 echo goodbye >world &&
26 git add world &&
27 git commit -m "submodule #2"
28 ) &&
29
30 set x $(
31 cd sub &&
32 git rev-list HEAD
33 ) &&
8e08b419
JH
34 echo ":160000 160000 $3 $_z40 M sub" >expect &&
35 subtip=$3 subprev=$2
2b459b48
JH
36'
37
38test_expect_success 'git diff --raw HEAD' '
39 git diff --raw --abbrev=40 HEAD >actual &&
82ebb0b6 40 test_cmp expect actual
2b459b48
JH
41'
42
43test_expect_success 'git diff-index --raw HEAD' '
44 git diff-index --raw HEAD >actual.index &&
82ebb0b6 45 test_cmp expect actual.index
2b459b48
JH
46'
47
48test_expect_success 'git diff-files --raw' '
49 git diff-files --raw >actual.files &&
82ebb0b6 50 test_cmp expect actual.files
2b459b48
JH
51'
52
8e08b419
JH
53expect_from_to () {
54 printf "%sSubproject commit %s\n+Subproject commit %s\n" \
55 "-" "$1" "$2"
56}
57
58test_expect_success 'git diff HEAD' '
59 git diff HEAD >actual &&
60 sed -e "1,/^@@/d" actual >actual.body &&
61 expect_from_to >expect.body $subtip $subprev &&
62 test_cmp expect.body actual.body
63'
64
65test_expect_success 'git diff HEAD with dirty submodule (work tree)' '
66 echo >>sub/world &&
67 git diff HEAD >actual &&
68 sed -e "1,/^@@/d" actual >actual.body &&
69 expect_from_to >expect.body $subtip $subprev-dirty &&
70 test_cmp expect.body actual.body
71'
72
73test_expect_success 'git diff HEAD with dirty submodule (index)' '
74 (
75 cd sub &&
76 git reset --hard &&
77 echo >>world &&
78 git add world
79 ) &&
80 git diff HEAD >actual &&
81 sed -e "1,/^@@/d" actual >actual.body &&
82 expect_from_to >expect.body $subtip $subprev-dirty &&
83 test_cmp expect.body actual.body
84'
85
86test_expect_success 'git diff HEAD with dirty submodule (untracked)' '
87 (
88 cd sub &&
89 git reset --hard &&
90 git clean -qfdx &&
91 >cruft
92 ) &&
93 git diff HEAD >actual &&
94 sed -e "1,/^@@/d" actual >actual.body &&
95 expect_from_to >expect.body $subtip $subprev-dirty &&
96 test_cmp expect.body actual.body
97'
98
99test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)' '
100 git commit -m "x" sub &&
101 echo >>sub/world &&
102 git diff HEAD >actual &&
103 sed -e "1,/^@@/d" actual >actual.body &&
104 expect_from_to >expect.body $subprev $subprev-dirty &&
dd44d419
JL
105 test_cmp expect.body actual.body &&
106 git diff --ignore-submodules HEAD >actual2 &&
6ed7ddaa 107 ! test -s actual2 &&
dd44d419
JL
108 git diff --ignore-submodules=untracked HEAD >actual3 &&
109 sed -e "1,/^@@/d" actual3 >actual3.body &&
110 expect_from_to >expect.body $subprev $subprev-dirty &&
111 test_cmp expect.body actual3.body &&
112 git diff --ignore-submodules=dirty HEAD >actual4 &&
6ed7ddaa 113 ! test -s actual4
8e08b419 114'
6ed7ddaa 115
aee9c7d6 116test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.git/config]' '
90e14525
JL
117 git config diff.ignoreSubmodules all &&
118 git diff HEAD >actual &&
119 ! test -s actual &&
aee9c7d6
JL
120 git config submodule.subname.ignore none &&
121 git config submodule.subname.path sub &&
122 git diff HEAD >actual &&
123 sed -e "1,/^@@/d" actual >actual.body &&
124 expect_from_to >expect.body $subprev $subprev-dirty &&
125 test_cmp expect.body actual.body &&
126 git config submodule.subname.ignore all &&
127 git diff HEAD >actual2 &&
128 ! test -s actual2 &&
129 git config submodule.subname.ignore untracked &&
130 git diff HEAD >actual3 &&
131 sed -e "1,/^@@/d" actual3 >actual3.body &&
132 expect_from_to >expect.body $subprev $subprev-dirty &&
133 test_cmp expect.body actual3.body &&
134 git config submodule.subname.ignore dirty &&
135 git diff HEAD >actual4 &&
136 ! test -s actual4 &&
137 git diff HEAD --ignore-submodules=none >actual &&
138 sed -e "1,/^@@/d" actual >actual.body &&
139 expect_from_to >expect.body $subprev $subprev-dirty &&
140 test_cmp expect.body actual.body &&
90e14525
JL
141 git config --remove-section submodule.subname &&
142 git config --unset diff.ignoreSubmodules
aee9c7d6
JL
143'
144
302ad7a9 145test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]' '
90e14525
JL
146 git config diff.ignoreSubmodules dirty &&
147 git diff HEAD >actual &&
148 ! test -s actual &&
302ad7a9
JL
149 git config --add -f .gitmodules submodule.subname.ignore none &&
150 git config --add -f .gitmodules submodule.subname.path sub &&
151 git diff HEAD >actual &&
152 sed -e "1,/^@@/d" actual >actual.body &&
153 expect_from_to >expect.body $subprev $subprev-dirty &&
154 test_cmp expect.body actual.body &&
155 git config -f .gitmodules submodule.subname.ignore all &&
156 git config -f .gitmodules submodule.subname.path sub &&
157 git diff HEAD >actual2 &&
158 ! test -s actual2 &&
159 git config -f .gitmodules submodule.subname.ignore untracked &&
160 git diff HEAD >actual3 &&
161 sed -e "1,/^@@/d" actual3 >actual3.body &&
162 expect_from_to >expect.body $subprev $subprev-dirty &&
163 test_cmp expect.body actual3.body &&
164 git config -f .gitmodules submodule.subname.ignore dirty &&
165 git diff HEAD >actual4 &&
166 ! test -s actual4 &&
167 git config submodule.subname.ignore none &&
168 git config submodule.subname.path sub &&
169 git diff HEAD >actual &&
170 sed -e "1,/^@@/d" actual >actual.body &&
171 expect_from_to >expect.body $subprev $subprev-dirty &&
172 test_cmp expect.body actual.body &&
173 git config --remove-section submodule.subname &&
174 git config --remove-section -f .gitmodules submodule.subname &&
90e14525 175 git config --unset diff.ignoreSubmodules &&
302ad7a9
JL
176 rm .gitmodules
177'
178
8e08b419
JH
179test_expect_success 'git diff HEAD with dirty submodule (index, refs match)' '
180 (
181 cd sub &&
182 git reset --hard &&
183 echo >>world &&
184 git add world
185 ) &&
186 git diff HEAD >actual &&
187 sed -e "1,/^@@/d" actual >actual.body &&
188 expect_from_to >expect.body $subprev $subprev-dirty &&
189 test_cmp expect.body actual.body
190'
191
192test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)' '
193 (
194 cd sub &&
195 git reset --hard &&
196 git clean -qfdx &&
197 >cruft
198 ) &&
199 git diff HEAD >actual &&
200 sed -e "1,/^@@/d" actual >actual.body &&
201 expect_from_to >expect.body $subprev $subprev-dirty &&
dd44d419
JL
202 test_cmp expect.body actual.body &&
203 git diff --ignore-submodules=all HEAD >actual2 &&
6ed7ddaa 204 ! test -s actual2 &&
dd44d419 205 git diff --ignore-submodules=untracked HEAD >actual3 &&
6ed7ddaa 206 ! test -s actual3 &&
dd44d419 207 git diff --ignore-submodules=dirty HEAD >actual4 &&
6ed7ddaa 208 ! test -s actual4
8e08b419
JH
209'
210
aee9c7d6
JL
211test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.git/config]' '
212 git config submodule.subname.ignore all &&
213 git config submodule.subname.path sub &&
214 git diff HEAD >actual2 &&
215 ! test -s actual2 &&
216 git config submodule.subname.ignore untracked &&
217 git diff HEAD >actual3 &&
218 ! test -s actual3 &&
219 git config submodule.subname.ignore dirty &&
220 git diff HEAD >actual4 &&
221 ! test -s actual4 &&
222 git diff --ignore-submodules=none HEAD >actual &&
223 sed -e "1,/^@@/d" actual >actual.body &&
224 expect_from_to >expect.body $subprev $subprev-dirty &&
225 test_cmp expect.body actual.body &&
226 git config --remove-section submodule.subname
227'
228
302ad7a9
JL
229test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]' '
230 git config --add -f .gitmodules submodule.subname.ignore all &&
231 git config --add -f .gitmodules submodule.subname.path sub &&
232 git diff HEAD >actual2 &&
233 ! test -s actual2 &&
234 git config -f .gitmodules submodule.subname.ignore untracked &&
235 git diff HEAD >actual3 &&
236 ! test -s actual3 &&
237 git config -f .gitmodules submodule.subname.ignore dirty &&
238 git diff HEAD >actual4 &&
239 ! test -s actual4 &&
240 git config submodule.subname.ignore none &&
241 git config submodule.subname.path sub &&
242 git diff HEAD >actual &&
243 sed -e "1,/^@@/d" actual >actual.body &&
244 expect_from_to >expect.body $subprev $subprev-dirty &&
245 test_cmp expect.body actual.body &&
246 git config --remove-section submodule.subname &&
247 git config --remove-section -f .gitmodules submodule.subname &&
248 rm .gitmodules
249'
250
aee9c7d6
JL
251test_expect_success 'git diff between submodule commits' '
252 git diff HEAD^..HEAD >actual &&
253 sed -e "1,/^@@/d" actual >actual.body &&
254 expect_from_to >expect.body $subtip $subprev &&
255 test_cmp expect.body actual.body &&
256 git diff --ignore-submodules=dirty HEAD^..HEAD >actual &&
257 sed -e "1,/^@@/d" actual >actual.body &&
258 expect_from_to >expect.body $subtip $subprev &&
259 test_cmp expect.body actual.body &&
260 git diff --ignore-submodules HEAD^..HEAD >actual &&
261 ! test -s actual
262'
263
264test_expect_success 'git diff between submodule commits [.git/config]' '
265 git diff HEAD^..HEAD >actual &&
266 sed -e "1,/^@@/d" actual >actual.body &&
267 expect_from_to >expect.body $subtip $subprev &&
268 test_cmp expect.body actual.body &&
269 git config submodule.subname.ignore dirty &&
270 git config submodule.subname.path sub &&
271 git diff HEAD^..HEAD >actual &&
272 sed -e "1,/^@@/d" actual >actual.body &&
273 expect_from_to >expect.body $subtip $subprev &&
274 test_cmp expect.body actual.body &&
275 git config submodule.subname.ignore all &&
276 git diff HEAD^..HEAD >actual &&
277 ! test -s actual &&
278 git diff --ignore-submodules=dirty HEAD^..HEAD >actual &&
279 sed -e "1,/^@@/d" actual >actual.body &&
280 expect_from_to >expect.body $subtip $subprev &&
281 git config --remove-section submodule.subname
282'
283
302ad7a9
JL
284test_expect_success 'git diff between submodule commits [.gitmodules]' '
285 git diff HEAD^..HEAD >actual &&
286 sed -e "1,/^@@/d" actual >actual.body &&
287 expect_from_to >expect.body $subtip $subprev &&
288 test_cmp expect.body actual.body &&
289 git config --add -f .gitmodules submodule.subname.ignore dirty &&
290 git config --add -f .gitmodules submodule.subname.path sub &&
291 git diff HEAD^..HEAD >actual &&
292 sed -e "1,/^@@/d" actual >actual.body &&
293 expect_from_to >expect.body $subtip $subprev &&
294 test_cmp expect.body actual.body &&
295 git config -f .gitmodules submodule.subname.ignore all &&
296 git diff HEAD^..HEAD >actual &&
297 ! test -s actual &&
298 git config submodule.subname.ignore dirty &&
299 git config submodule.subname.path sub &&
300 git diff HEAD^..HEAD >actual &&
301 sed -e "1,/^@@/d" actual >actual.body &&
302 expect_from_to >expect.body $subtip $subprev &&
303 git config --remove-section submodule.subname &&
304 git config --remove-section -f .gitmodules submodule.subname &&
305 rm .gitmodules
306'
307
1392a377 308test_expect_success 'git diff (empty submodule dir)' '
7c08a2a6
PY
309 : >empty &&
310 rm -rf sub/* sub/.git &&
311 git diff > actual.empty &&
312 test_cmp empty actual.empty
313'
314
7dae8b21
JH
315test_expect_success 'conflicted submodule setup' '
316
317 # 39 efs
a48fcd83 318 c=fffffffffffffffffffffffffffffffffffffff &&
7dae8b21 319 (
a48fcd83
JN
320 echo "000000 $_z40 0 sub" &&
321 echo "160000 1$c 1 sub" &&
322 echo "160000 2$c 2 sub" &&
7dae8b21
JH
323 echo "160000 3$c 3 sub"
324 ) | git update-index --index-info &&
325 echo >expect.nosub '\''diff --cc sub
326index 2ffffff,3ffffff..0000000
327--- a/sub
328+++ b/sub
329@@@ -1,1 -1,1 +1,1 @@@
330- Subproject commit 2fffffffffffffffffffffffffffffffffffffff
331 -Subproject commit 3fffffffffffffffffffffffffffffffffffffff
332++Subproject commit 0000000000000000000000000000000000000000'\'' &&
333
334 hh=$(git rev-parse HEAD) &&
335 sed -e "s/$_z40/$hh/" expect.nosub >expect.withsub
336
337'
338
339test_expect_success 'combined (empty submodule)' '
340 rm -fr sub && mkdir sub &&
341 git diff >actual &&
342 test_cmp expect.nosub actual
343'
344
345test_expect_success 'combined (with submodule)' '
346 rm -fr sub &&
347 git clone --no-checkout . sub &&
348 git diff >actual &&
349 test_cmp expect.withsub actual
350'
351
352
353
2b459b48 354test_done