]>
Commit | Line | Data |
---|---|---|
fd47ae6a JK |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin | |
4 | # Copyright (c) 2011 Alexey Shumkin (+ non-UTF-8 commit encoding tests) | |
5 | # Copyright (c) 2016 Jacob Keller (copy + convert to --submodule=diff) | |
6 | # | |
7 | ||
8 | test_description='Support for diff format verbose submodule difference in git diff | |
9 | ||
10 | This test tries to verify the sanity of --submodule=diff option of git diff. | |
11 | ' | |
12 | ||
13 | . ./test-lib.sh | |
14 | ||
15 | # Tested non-UTF-8 encoding | |
16 | test_encoding="ISO8859-1" | |
17 | ||
18 | # String "added" in German (translated with Google Translate), encoded in UTF-8, | |
19 | # used in sample commit log messages in add_file() function below. | |
20 | added=$(printf "hinzugef\303\274gt") | |
21 | ||
22 | add_file () { | |
23 | ( | |
24 | cd "$1" && | |
25 | shift && | |
26 | for name | |
27 | do | |
28 | echo "$name" >"$name" && | |
29 | git add "$name" && | |
30 | test_tick && | |
31 | # "git commit -m" would break MinGW, as Windows refuse to pass | |
32 | # $test_encoding encoded parameter to git. | |
33 | echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding | | |
34 | git -c "i18n.commitEncoding=$test_encoding" commit -F - | |
35 | done >/dev/null && | |
36 | git rev-parse --short --verify HEAD | |
37 | ) | |
38 | } | |
39 | ||
40 | commit_file () { | |
41 | test_tick && | |
42 | git commit "$@" -m "Commit $*" >/dev/null | |
43 | } | |
44 | ||
45 | test_expect_success 'setup repository' ' | |
46 | test_create_repo sm1 && | |
47 | add_file . foo && | |
48 | head1=$(add_file sm1 foo1 foo2) && | |
49 | fullhead1=$(git -C sm1 rev-parse --verify HEAD) | |
50 | ' | |
51 | ||
52 | test_expect_success 'added submodule' ' | |
53 | git add sm1 && | |
54 | git diff-index -p --submodule=diff HEAD >actual && | |
55 | cat >expected <<-EOF && | |
56 | Submodule sm1 0000000...$head1 (new submodule) | |
57 | diff --git a/sm1/foo1 b/sm1/foo1 | |
58 | new file mode 100644 | |
59 | index 0000000..1715acd | |
60 | --- /dev/null | |
61 | +++ b/sm1/foo1 | |
62 | @@ -0,0 +1 @@ | |
63 | +foo1 | |
64 | diff --git a/sm1/foo2 b/sm1/foo2 | |
65 | new file mode 100644 | |
66 | index 0000000..54b060e | |
67 | --- /dev/null | |
68 | +++ b/sm1/foo2 | |
69 | @@ -0,0 +1 @@ | |
70 | +foo2 | |
71 | EOF | |
72 | test_cmp expected actual | |
73 | ' | |
74 | ||
75 | test_expect_success 'added submodule, set diff.submodule' ' | |
76 | test_config diff.submodule log && | |
77 | git add sm1 && | |
78 | git diff-index -p --submodule=diff HEAD >actual && | |
79 | cat >expected <<-EOF && | |
80 | Submodule sm1 0000000...$head1 (new submodule) | |
81 | diff --git a/sm1/foo1 b/sm1/foo1 | |
82 | new file mode 100644 | |
83 | index 0000000..1715acd | |
84 | --- /dev/null | |
85 | +++ b/sm1/foo1 | |
86 | @@ -0,0 +1 @@ | |
87 | +foo1 | |
88 | diff --git a/sm1/foo2 b/sm1/foo2 | |
89 | new file mode 100644 | |
90 | index 0000000..54b060e | |
91 | --- /dev/null | |
92 | +++ b/sm1/foo2 | |
93 | @@ -0,0 +1 @@ | |
94 | +foo2 | |
95 | EOF | |
96 | test_cmp expected actual | |
97 | ' | |
98 | ||
99 | test_expect_success '--submodule=short overrides diff.submodule' ' | |
100 | test_config diff.submodule log && | |
101 | git add sm1 && | |
102 | git diff --submodule=short --cached >actual && | |
103 | cat >expected <<-EOF && | |
104 | diff --git a/sm1 b/sm1 | |
105 | new file mode 160000 | |
106 | index 0000000..$head1 | |
107 | --- /dev/null | |
108 | +++ b/sm1 | |
109 | @@ -0,0 +1 @@ | |
110 | +Subproject commit $fullhead1 | |
111 | EOF | |
112 | test_cmp expected actual | |
113 | ' | |
114 | ||
115 | test_expect_success 'diff.submodule does not affect plumbing' ' | |
116 | test_config diff.submodule log && | |
117 | git diff-index -p HEAD >actual && | |
118 | cat >expected <<-EOF && | |
119 | diff --git a/sm1 b/sm1 | |
120 | new file mode 160000 | |
121 | index 0000000..$head1 | |
122 | --- /dev/null | |
123 | +++ b/sm1 | |
124 | @@ -0,0 +1 @@ | |
125 | +Subproject commit $fullhead1 | |
126 | EOF | |
127 | test_cmp expected actual | |
128 | ' | |
129 | ||
130 | commit_file sm1 && | |
131 | head2=$(add_file sm1 foo3) | |
132 | ||
133 | test_expect_success 'modified submodule(forward)' ' | |
134 | git diff-index -p --submodule=diff HEAD >actual && | |
135 | cat >expected <<-EOF && | |
136 | Submodule sm1 $head1..$head2: | |
137 | diff --git a/sm1/foo3 b/sm1/foo3 | |
138 | new file mode 100644 | |
139 | index 0000000..c1ec6c6 | |
140 | --- /dev/null | |
141 | +++ b/sm1/foo3 | |
142 | @@ -0,0 +1 @@ | |
143 | +foo3 | |
144 | EOF | |
145 | test_cmp expected actual | |
146 | ' | |
147 | ||
148 | test_expect_success 'modified submodule(forward)' ' | |
149 | git diff --submodule=diff >actual && | |
150 | cat >expected <<-EOF && | |
151 | Submodule sm1 $head1..$head2: | |
152 | diff --git a/sm1/foo3 b/sm1/foo3 | |
153 | new file mode 100644 | |
154 | index 0000000..c1ec6c6 | |
155 | --- /dev/null | |
156 | +++ b/sm1/foo3 | |
157 | @@ -0,0 +1 @@ | |
158 | +foo3 | |
159 | EOF | |
160 | test_cmp expected actual | |
161 | ' | |
162 | ||
163 | test_expect_success 'modified submodule(forward) --submodule' ' | |
164 | git diff --submodule >actual && | |
165 | cat >expected <<-EOF && | |
166 | Submodule sm1 $head1..$head2: | |
167 | > Add foo3 ($added foo3) | |
168 | EOF | |
169 | test_cmp expected actual | |
170 | ' | |
171 | ||
172 | fullhead2=$(cd sm1; git rev-parse --verify HEAD) | |
173 | test_expect_success 'modified submodule(forward) --submodule=short' ' | |
174 | git diff --submodule=short >actual && | |
175 | cat >expected <<-EOF && | |
176 | diff --git a/sm1 b/sm1 | |
177 | index $head1..$head2 160000 | |
178 | --- a/sm1 | |
179 | +++ b/sm1 | |
180 | @@ -1 +1 @@ | |
181 | -Subproject commit $fullhead1 | |
182 | +Subproject commit $fullhead2 | |
183 | EOF | |
184 | test_cmp expected actual | |
185 | ' | |
186 | ||
187 | commit_file sm1 && | |
188 | head3=$( | |
189 | cd sm1 && | |
190 | git reset --hard HEAD~2 >/dev/null && | |
191 | git rev-parse --short --verify HEAD | |
192 | ) | |
193 | ||
194 | test_expect_success 'modified submodule(backward)' ' | |
195 | git diff-index -p --submodule=diff HEAD >actual && | |
196 | cat >expected <<-EOF && | |
197 | Submodule sm1 $head2..$head3 (rewind): | |
198 | diff --git a/sm1/foo2 b/sm1/foo2 | |
199 | deleted file mode 100644 | |
200 | index 54b060e..0000000 | |
201 | --- a/sm1/foo2 | |
202 | +++ /dev/null | |
203 | @@ -1 +0,0 @@ | |
204 | -foo2 | |
205 | diff --git a/sm1/foo3 b/sm1/foo3 | |
206 | deleted file mode 100644 | |
207 | index c1ec6c6..0000000 | |
208 | --- a/sm1/foo3 | |
209 | +++ /dev/null | |
210 | @@ -1 +0,0 @@ | |
211 | -foo3 | |
212 | EOF | |
213 | test_cmp expected actual | |
214 | ' | |
215 | ||
216 | head4=$(add_file sm1 foo4 foo5) | |
217 | test_expect_success 'modified submodule(backward and forward)' ' | |
218 | git diff-index -p --submodule=diff HEAD >actual && | |
219 | cat >expected <<-EOF && | |
220 | Submodule sm1 $head2...$head4: | |
221 | diff --git a/sm1/foo2 b/sm1/foo2 | |
222 | deleted file mode 100644 | |
223 | index 54b060e..0000000 | |
224 | --- a/sm1/foo2 | |
225 | +++ /dev/null | |
226 | @@ -1 +0,0 @@ | |
227 | -foo2 | |
228 | diff --git a/sm1/foo3 b/sm1/foo3 | |
229 | deleted file mode 100644 | |
230 | index c1ec6c6..0000000 | |
231 | --- a/sm1/foo3 | |
232 | +++ /dev/null | |
233 | @@ -1 +0,0 @@ | |
234 | -foo3 | |
235 | diff --git a/sm1/foo4 b/sm1/foo4 | |
236 | new file mode 100644 | |
237 | index 0000000..a0016db | |
238 | --- /dev/null | |
239 | +++ b/sm1/foo4 | |
240 | @@ -0,0 +1 @@ | |
241 | +foo4 | |
242 | diff --git a/sm1/foo5 b/sm1/foo5 | |
243 | new file mode 100644 | |
244 | index 0000000..d6f2413 | |
245 | --- /dev/null | |
246 | +++ b/sm1/foo5 | |
247 | @@ -0,0 +1 @@ | |
248 | +foo5 | |
249 | EOF | |
250 | test_cmp expected actual | |
251 | ' | |
252 | ||
253 | commit_file sm1 && | |
254 | mv sm1 sm1-bak && | |
255 | echo sm1 >sm1 && | |
256 | head5=$(git hash-object sm1 | cut -c1-7) && | |
257 | git add sm1 && | |
258 | rm -f sm1 && | |
259 | mv sm1-bak sm1 | |
260 | ||
261 | test_expect_success 'typechanged submodule(submodule->blob), --cached' ' | |
262 | git diff --submodule=diff --cached >actual && | |
263 | cat >expected <<-EOF && | |
264 | Submodule sm1 $head4...0000000 (submodule deleted) | |
265 | diff --git a/sm1/foo1 b/sm1/foo1 | |
266 | deleted file mode 100644 | |
267 | index 1715acd..0000000 | |
268 | --- a/sm1/foo1 | |
269 | +++ /dev/null | |
270 | @@ -1 +0,0 @@ | |
271 | -foo1 | |
272 | diff --git a/sm1/foo4 b/sm1/foo4 | |
273 | deleted file mode 100644 | |
274 | index a0016db..0000000 | |
275 | --- a/sm1/foo4 | |
276 | +++ /dev/null | |
277 | @@ -1 +0,0 @@ | |
278 | -foo4 | |
279 | diff --git a/sm1/foo5 b/sm1/foo5 | |
280 | deleted file mode 100644 | |
281 | index d6f2413..0000000 | |
282 | --- a/sm1/foo5 | |
283 | +++ /dev/null | |
284 | @@ -1 +0,0 @@ | |
285 | -foo5 | |
286 | diff --git a/sm1 b/sm1 | |
287 | new file mode 100644 | |
288 | index 0000000..9da5fb8 | |
289 | --- /dev/null | |
290 | +++ b/sm1 | |
291 | @@ -0,0 +1 @@ | |
292 | +sm1 | |
293 | EOF | |
294 | test_cmp expected actual | |
295 | ' | |
296 | ||
297 | test_expect_success 'typechanged submodule(submodule->blob)' ' | |
298 | git diff --submodule=diff >actual && | |
299 | cat >expected <<-EOF && | |
300 | diff --git a/sm1 b/sm1 | |
301 | deleted file mode 100644 | |
302 | index 9da5fb8..0000000 | |
303 | --- a/sm1 | |
304 | +++ /dev/null | |
305 | @@ -1 +0,0 @@ | |
306 | -sm1 | |
307 | Submodule sm1 0000000...$head4 (new submodule) | |
308 | diff --git a/sm1/foo1 b/sm1/foo1 | |
309 | new file mode 100644 | |
310 | index 0000000..1715acd | |
311 | --- /dev/null | |
312 | +++ b/sm1/foo1 | |
313 | @@ -0,0 +1 @@ | |
314 | +foo1 | |
315 | diff --git a/sm1/foo4 b/sm1/foo4 | |
316 | new file mode 100644 | |
317 | index 0000000..a0016db | |
318 | --- /dev/null | |
319 | +++ b/sm1/foo4 | |
320 | @@ -0,0 +1 @@ | |
321 | +foo4 | |
322 | diff --git a/sm1/foo5 b/sm1/foo5 | |
323 | new file mode 100644 | |
324 | index 0000000..d6f2413 | |
325 | --- /dev/null | |
326 | +++ b/sm1/foo5 | |
327 | @@ -0,0 +1 @@ | |
328 | +foo5 | |
329 | EOF | |
330 | test_cmp expected actual | |
331 | ' | |
332 | ||
333 | rm -rf sm1 && | |
334 | git checkout-index sm1 | |
335 | test_expect_success 'typechanged submodule(submodule->blob)' ' | |
336 | git diff-index -p --submodule=diff HEAD >actual && | |
337 | cat >expected <<-EOF && | |
338 | Submodule sm1 $head4...0000000 (submodule deleted) | |
339 | diff --git a/sm1 b/sm1 | |
340 | new file mode 100644 | |
341 | index 0000000..9da5fb8 | |
342 | --- /dev/null | |
343 | +++ b/sm1 | |
344 | @@ -0,0 +1 @@ | |
345 | +sm1 | |
346 | EOF | |
347 | test_cmp expected actual | |
348 | ' | |
349 | ||
350 | rm -f sm1 && | |
351 | test_create_repo sm1 && | |
352 | head6=$(add_file sm1 foo6 foo7) | |
353 | fullhead6=$(cd sm1; git rev-parse --verify HEAD) | |
354 | test_expect_success 'nonexistent commit' ' | |
355 | git diff-index -p --submodule=diff HEAD >actual && | |
356 | cat >expected <<-EOF && | |
357 | Submodule sm1 $head4...$head6 (commits not present) | |
358 | EOF | |
359 | test_cmp expected actual | |
360 | ' | |
361 | ||
362 | commit_file | |
363 | test_expect_success 'typechanged submodule(blob->submodule)' ' | |
364 | git diff-index -p --submodule=diff HEAD >actual && | |
365 | cat >expected <<-EOF && | |
366 | diff --git a/sm1 b/sm1 | |
367 | deleted file mode 100644 | |
368 | index 9da5fb8..0000000 | |
369 | --- a/sm1 | |
370 | +++ /dev/null | |
371 | @@ -1 +0,0 @@ | |
372 | -sm1 | |
373 | Submodule sm1 0000000...$head6 (new submodule) | |
374 | diff --git a/sm1/foo6 b/sm1/foo6 | |
375 | new file mode 100644 | |
376 | index 0000000..462398b | |
377 | --- /dev/null | |
378 | +++ b/sm1/foo6 | |
379 | @@ -0,0 +1 @@ | |
380 | +foo6 | |
381 | diff --git a/sm1/foo7 b/sm1/foo7 | |
382 | new file mode 100644 | |
383 | index 0000000..6e9262c | |
384 | --- /dev/null | |
385 | +++ b/sm1/foo7 | |
386 | @@ -0,0 +1 @@ | |
387 | +foo7 | |
388 | EOF | |
389 | test_cmp expected actual | |
390 | ' | |
391 | ||
392 | commit_file sm1 && | |
393 | test_expect_success 'submodule is up to date' ' | |
394 | git diff-index -p --submodule=diff HEAD >actual && | |
395 | cat >expected <<-EOF && | |
396 | EOF | |
397 | test_cmp expected actual | |
398 | ' | |
399 | ||
400 | test_expect_success 'submodule contains untracked content' ' | |
401 | echo new > sm1/new-file && | |
402 | git diff-index -p --submodule=diff HEAD >actual && | |
403 | cat >expected <<-EOF && | |
404 | Submodule sm1 contains untracked content | |
405 | EOF | |
406 | test_cmp expected actual | |
407 | ' | |
408 | ||
409 | test_expect_success 'submodule contains untracked content (untracked ignored)' ' | |
410 | git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual && | |
411 | ! test -s actual | |
412 | ' | |
413 | ||
414 | test_expect_success 'submodule contains untracked content (dirty ignored)' ' | |
415 | git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && | |
416 | ! test -s actual | |
417 | ' | |
418 | ||
419 | test_expect_success 'submodule contains untracked content (all ignored)' ' | |
420 | git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual && | |
421 | ! test -s actual | |
422 | ' | |
423 | ||
424 | test_expect_success 'submodule contains untracked and modified content' ' | |
425 | echo new > sm1/foo6 && | |
426 | git diff-index -p --submodule=diff HEAD >actual && | |
427 | cat >expected <<-EOF && | |
428 | Submodule sm1 contains untracked content | |
429 | Submodule sm1 contains modified content | |
430 | diff --git a/sm1/foo6 b/sm1/foo6 | |
431 | index 462398b..3e75765 100644 | |
432 | --- a/sm1/foo6 | |
433 | +++ b/sm1/foo6 | |
434 | @@ -1 +1 @@ | |
435 | -foo6 | |
436 | +new | |
437 | EOF | |
438 | test_cmp expected actual | |
439 | ' | |
440 | ||
441 | # NOT OK | |
442 | test_expect_success 'submodule contains untracked and modified content (untracked ignored)' ' | |
443 | echo new > sm1/foo6 && | |
444 | git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual && | |
445 | cat >expected <<-EOF && | |
446 | Submodule sm1 contains modified content | |
447 | diff --git a/sm1/foo6 b/sm1/foo6 | |
448 | index 462398b..3e75765 100644 | |
449 | --- a/sm1/foo6 | |
450 | +++ b/sm1/foo6 | |
451 | @@ -1 +1 @@ | |
452 | -foo6 | |
453 | +new | |
454 | EOF | |
455 | test_cmp expected actual | |
456 | ' | |
457 | ||
458 | test_expect_success 'submodule contains untracked and modified content (dirty ignored)' ' | |
459 | echo new > sm1/foo6 && | |
460 | git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && | |
461 | ! test -s actual | |
462 | ' | |
463 | ||
464 | test_expect_success 'submodule contains untracked and modified content (all ignored)' ' | |
465 | echo new > sm1/foo6 && | |
466 | git diff-index -p --ignore-submodules --submodule=diff HEAD >actual && | |
467 | ! test -s actual | |
468 | ' | |
469 | ||
470 | test_expect_success 'submodule contains modified content' ' | |
471 | rm -f sm1/new-file && | |
472 | git diff-index -p --submodule=diff HEAD >actual && | |
473 | cat >expected <<-EOF && | |
474 | Submodule sm1 contains modified content | |
475 | diff --git a/sm1/foo6 b/sm1/foo6 | |
476 | index 462398b..3e75765 100644 | |
477 | --- a/sm1/foo6 | |
478 | +++ b/sm1/foo6 | |
479 | @@ -1 +1 @@ | |
480 | -foo6 | |
481 | +new | |
482 | EOF | |
483 | test_cmp expected actual | |
484 | ' | |
485 | ||
486 | (cd sm1; git commit -mchange foo6 >/dev/null) && | |
487 | head8=$(cd sm1; git rev-parse --short --verify HEAD) && | |
488 | test_expect_success 'submodule is modified' ' | |
489 | git diff-index -p --submodule=diff HEAD >actual && | |
490 | cat >expected <<-EOF && | |
491 | Submodule sm1 17243c9..$head8: | |
492 | diff --git a/sm1/foo6 b/sm1/foo6 | |
493 | index 462398b..3e75765 100644 | |
494 | --- a/sm1/foo6 | |
495 | +++ b/sm1/foo6 | |
496 | @@ -1 +1 @@ | |
497 | -foo6 | |
498 | +new | |
499 | EOF | |
500 | test_cmp expected actual | |
501 | ' | |
502 | ||
503 | test_expect_success 'modified submodule contains untracked content' ' | |
504 | echo new > sm1/new-file && | |
505 | git diff-index -p --submodule=diff HEAD >actual && | |
506 | cat >expected <<-EOF && | |
507 | Submodule sm1 contains untracked content | |
508 | Submodule sm1 17243c9..$head8: | |
509 | diff --git a/sm1/foo6 b/sm1/foo6 | |
510 | index 462398b..3e75765 100644 | |
511 | --- a/sm1/foo6 | |
512 | +++ b/sm1/foo6 | |
513 | @@ -1 +1 @@ | |
514 | -foo6 | |
515 | +new | |
516 | EOF | |
517 | test_cmp expected actual | |
518 | ' | |
519 | ||
520 | test_expect_success 'modified submodule contains untracked content (untracked ignored)' ' | |
521 | git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual && | |
522 | cat >expected <<-EOF && | |
523 | Submodule sm1 17243c9..$head8: | |
524 | diff --git a/sm1/foo6 b/sm1/foo6 | |
525 | index 462398b..3e75765 100644 | |
526 | --- a/sm1/foo6 | |
527 | +++ b/sm1/foo6 | |
528 | @@ -1 +1 @@ | |
529 | -foo6 | |
530 | +new | |
531 | EOF | |
532 | test_cmp expected actual | |
533 | ' | |
534 | ||
535 | test_expect_success 'modified submodule contains untracked content (dirty ignored)' ' | |
536 | git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && | |
537 | cat >expected <<-EOF && | |
538 | Submodule sm1 17243c9..cfce562: | |
539 | diff --git a/sm1/foo6 b/sm1/foo6 | |
540 | index 462398b..3e75765 100644 | |
541 | --- a/sm1/foo6 | |
542 | +++ b/sm1/foo6 | |
543 | @@ -1 +1 @@ | |
544 | -foo6 | |
545 | +new | |
546 | EOF | |
547 | test_cmp expected actual | |
548 | ' | |
549 | ||
550 | test_expect_success 'modified submodule contains untracked content (all ignored)' ' | |
551 | git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual && | |
552 | ! test -s actual | |
553 | ' | |
554 | ||
555 | test_expect_success 'modified submodule contains untracked and modified content' ' | |
556 | echo modification >> sm1/foo6 && | |
557 | git diff-index -p --submodule=diff HEAD >actual && | |
558 | cat >expected <<-EOF && | |
559 | Submodule sm1 contains untracked content | |
560 | Submodule sm1 contains modified content | |
561 | Submodule sm1 17243c9..cfce562: | |
562 | diff --git a/sm1/foo6 b/sm1/foo6 | |
563 | index 462398b..dfda541 100644 | |
564 | --- a/sm1/foo6 | |
565 | +++ b/sm1/foo6 | |
566 | @@ -1 +1,2 @@ | |
567 | -foo6 | |
568 | +new | |
569 | +modification | |
570 | EOF | |
571 | test_cmp expected actual | |
572 | ' | |
573 | ||
574 | test_expect_success 'modified submodule contains untracked and modified content (untracked ignored)' ' | |
575 | echo modification >> sm1/foo6 && | |
576 | git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual && | |
577 | cat >expected <<-EOF && | |
578 | Submodule sm1 contains modified content | |
579 | Submodule sm1 17243c9..cfce562: | |
580 | diff --git a/sm1/foo6 b/sm1/foo6 | |
581 | index 462398b..e20e2d9 100644 | |
582 | --- a/sm1/foo6 | |
583 | +++ b/sm1/foo6 | |
584 | @@ -1 +1,3 @@ | |
585 | -foo6 | |
586 | +new | |
587 | +modification | |
588 | +modification | |
589 | EOF | |
590 | test_cmp expected actual | |
591 | ' | |
592 | ||
593 | test_expect_success 'modified submodule contains untracked and modified content (dirty ignored)' ' | |
594 | echo modification >> sm1/foo6 && | |
595 | git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && | |
596 | cat >expected <<-EOF && | |
597 | Submodule sm1 17243c9..cfce562: | |
598 | diff --git a/sm1/foo6 b/sm1/foo6 | |
599 | index 462398b..3e75765 100644 | |
600 | --- a/sm1/foo6 | |
601 | +++ b/sm1/foo6 | |
602 | @@ -1 +1 @@ | |
603 | -foo6 | |
604 | +new | |
605 | EOF | |
606 | test_cmp expected actual | |
607 | ' | |
608 | ||
609 | test_expect_success 'modified submodule contains untracked and modified content (all ignored)' ' | |
610 | echo modification >> sm1/foo6 && | |
611 | git diff-index -p --ignore-submodules --submodule=diff HEAD >actual && | |
612 | ! test -s actual | |
613 | ' | |
614 | ||
615 | # NOT OK | |
616 | test_expect_success 'modified submodule contains modified content' ' | |
617 | rm -f sm1/new-file && | |
618 | git diff-index -p --submodule=diff HEAD >actual && | |
619 | cat >expected <<-EOF && | |
620 | Submodule sm1 contains modified content | |
621 | Submodule sm1 17243c9..cfce562: | |
622 | diff --git a/sm1/foo6 b/sm1/foo6 | |
623 | index 462398b..ac466ca 100644 | |
624 | --- a/sm1/foo6 | |
625 | +++ b/sm1/foo6 | |
626 | @@ -1 +1,5 @@ | |
627 | -foo6 | |
628 | +new | |
629 | +modification | |
630 | +modification | |
631 | +modification | |
632 | +modification | |
633 | EOF | |
634 | test_cmp expected actual | |
635 | ' | |
636 | ||
637 | rm -rf sm1 | |
638 | test_expect_success 'deleted submodule' ' | |
639 | git diff-index -p --submodule=diff HEAD >actual && | |
640 | cat >expected <<-EOF && | |
641 | Submodule sm1 17243c9...0000000 (submodule deleted) | |
642 | EOF | |
643 | test_cmp expected actual | |
644 | ' | |
645 | ||
17f2f88c JK |
646 | test_expect_success 'create second submodule' ' |
647 | test_create_repo sm2 && | |
648 | head7=$(add_file sm2 foo8 foo9) && | |
649 | git add sm2 | |
650 | ' | |
fd47ae6a JK |
651 | |
652 | test_expect_success 'multiple submodules' ' | |
653 | git diff-index -p --submodule=diff HEAD >actual && | |
654 | cat >expected <<-EOF && | |
655 | Submodule sm1 17243c9...0000000 (submodule deleted) | |
656 | Submodule sm2 0000000...a5a65c9 (new submodule) | |
657 | diff --git a/sm2/foo8 b/sm2/foo8 | |
658 | new file mode 100644 | |
659 | index 0000000..db9916b | |
660 | --- /dev/null | |
661 | +++ b/sm2/foo8 | |
662 | @@ -0,0 +1 @@ | |
663 | +foo8 | |
664 | diff --git a/sm2/foo9 b/sm2/foo9 | |
665 | new file mode 100644 | |
666 | index 0000000..9c3b4f6 | |
667 | --- /dev/null | |
668 | +++ b/sm2/foo9 | |
669 | @@ -0,0 +1 @@ | |
670 | +foo9 | |
671 | EOF | |
672 | test_cmp expected actual | |
673 | ' | |
674 | ||
675 | test_expect_success 'path filter' ' | |
676 | git diff-index -p --submodule=diff HEAD sm2 >actual && | |
677 | cat >expected <<-EOF && | |
678 | Submodule sm2 0000000...a5a65c9 (new submodule) | |
679 | diff --git a/sm2/foo8 b/sm2/foo8 | |
680 | new file mode 100644 | |
681 | index 0000000..db9916b | |
682 | --- /dev/null | |
683 | +++ b/sm2/foo8 | |
684 | @@ -0,0 +1 @@ | |
685 | +foo8 | |
686 | diff --git a/sm2/foo9 b/sm2/foo9 | |
687 | new file mode 100644 | |
688 | index 0000000..9c3b4f6 | |
689 | --- /dev/null | |
690 | +++ b/sm2/foo9 | |
691 | @@ -0,0 +1 @@ | |
692 | +foo9 | |
693 | EOF | |
694 | test_cmp expected actual | |
695 | ' | |
696 | ||
697 | commit_file sm2 | |
698 | test_expect_success 'given commit' ' | |
699 | git diff-index -p --submodule=diff HEAD^ >actual && | |
700 | cat >expected <<-EOF && | |
701 | Submodule sm1 17243c9...0000000 (submodule deleted) | |
702 | Submodule sm2 0000000...a5a65c9 (new submodule) | |
703 | diff --git a/sm2/foo8 b/sm2/foo8 | |
704 | new file mode 100644 | |
705 | index 0000000..db9916b | |
706 | --- /dev/null | |
707 | +++ b/sm2/foo8 | |
708 | @@ -0,0 +1 @@ | |
709 | +foo8 | |
710 | diff --git a/sm2/foo9 b/sm2/foo9 | |
711 | new file mode 100644 | |
712 | index 0000000..9c3b4f6 | |
713 | --- /dev/null | |
714 | +++ b/sm2/foo9 | |
715 | @@ -0,0 +1 @@ | |
716 | +foo9 | |
717 | EOF | |
718 | test_cmp expected actual | |
719 | ' | |
720 | ||
721 | test_expect_success 'setup .git file for sm2' ' | |
722 | (cd sm2 && | |
723 | REAL="$(pwd)/../.real" && | |
724 | mv .git "$REAL" | |
725 | echo "gitdir: $REAL" >.git) | |
726 | ' | |
727 | ||
728 | test_expect_success 'diff --submodule=diff with .git file' ' | |
729 | git diff --submodule=diff HEAD^ >actual && | |
730 | cat >expected <<-EOF && | |
731 | Submodule sm1 17243c9...0000000 (submodule deleted) | |
732 | Submodule sm2 0000000...a5a65c9 (new submodule) | |
733 | diff --git a/sm2/foo8 b/sm2/foo8 | |
734 | new file mode 100644 | |
735 | index 0000000..db9916b | |
736 | --- /dev/null | |
737 | +++ b/sm2/foo8 | |
738 | @@ -0,0 +1 @@ | |
739 | +foo8 | |
740 | diff --git a/sm2/foo9 b/sm2/foo9 | |
741 | new file mode 100644 | |
742 | index 0000000..9c3b4f6 | |
743 | --- /dev/null | |
744 | +++ b/sm2/foo9 | |
745 | @@ -0,0 +1 @@ | |
746 | +foo9 | |
747 | EOF | |
748 | test_cmp expected actual | |
749 | ' | |
750 | ||
17b254cd SB |
751 | test_expect_success 'setup nested submodule' ' |
752 | git submodule add -f ./sm2 && | |
753 | git commit -a -m "add sm2" && | |
754 | git -C sm2 submodule add ../sm2 nested && | |
755 | git -C sm2 commit -a -m "nested sub" | |
756 | ' | |
757 | ||
758 | test_expect_success 'move nested submodule HEAD' ' | |
759 | echo "nested content" >sm2/nested/file && | |
760 | git -C sm2/nested add file && | |
761 | git -C sm2/nested commit --allow-empty -m "new HEAD" | |
762 | ' | |
763 | ||
764 | test_expect_success 'diff --submodule=diff with moved nested submodule HEAD' ' | |
765 | cat >expected <<-EOF && | |
766 | Submodule nested a5a65c9..b55928c: | |
767 | diff --git a/nested/file b/nested/file | |
768 | new file mode 100644 | |
769 | index 0000000..ca281f5 | |
770 | --- /dev/null | |
771 | +++ b/nested/file | |
772 | @@ -0,0 +1 @@ | |
773 | +nested content | |
774 | EOF | |
775 | git -C sm2 diff --submodule=diff >actual 2>err && | |
776 | test_must_be_empty err && | |
777 | test_cmp expected actual | |
778 | ' | |
779 | ||
5a522142 SB |
780 | test_expect_success 'diff --submodule=diff recurses into nested submodules' ' |
781 | cat >expected <<-EOF && | |
782 | Submodule sm2 contains modified content | |
783 | Submodule sm2 a5a65c9..280969a: | |
784 | diff --git a/sm2/.gitmodules b/sm2/.gitmodules | |
785 | new file mode 100644 | |
786 | index 0000000..3a816b8 | |
787 | --- /dev/null | |
788 | +++ b/sm2/.gitmodules | |
789 | @@ -0,0 +1,3 @@ | |
790 | +[submodule "nested"] | |
791 | + path = nested | |
792 | + url = ../sm2 | |
793 | Submodule nested 0000000...b55928c (new submodule) | |
794 | diff --git a/sm2/nested/file b/sm2/nested/file | |
795 | new file mode 100644 | |
796 | index 0000000..ca281f5 | |
797 | --- /dev/null | |
798 | +++ b/sm2/nested/file | |
799 | @@ -0,0 +1 @@ | |
800 | +nested content | |
801 | diff --git a/sm2/nested/foo8 b/sm2/nested/foo8 | |
802 | new file mode 100644 | |
803 | index 0000000..db9916b | |
804 | --- /dev/null | |
805 | +++ b/sm2/nested/foo8 | |
806 | @@ -0,0 +1 @@ | |
807 | +foo8 | |
808 | diff --git a/sm2/nested/foo9 b/sm2/nested/foo9 | |
809 | new file mode 100644 | |
810 | index 0000000..9c3b4f6 | |
811 | --- /dev/null | |
812 | +++ b/sm2/nested/foo9 | |
813 | @@ -0,0 +1 @@ | |
814 | +foo9 | |
815 | EOF | |
816 | git diff --submodule=diff >actual 2>err && | |
817 | test_must_be_empty err && | |
818 | test_cmp expected actual | |
819 | ' | |
820 | ||
fd47ae6a | 821 | test_done |