3 # Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin
6 test_description
='Support for verbose submodule differences in git diff
8 This test tries to verify the sanity of the --submodule option of git diff.
19 echo "$name" > "$name" &&
22 git commit
-m "Add $name"
24 git rev-parse
--verify HEAD | cut
-c1-7
29 git commit
"$@" -m "Commit $*" >/dev
/null
32 test_create_repo sm1
&&
33 add_file . foo
>/dev
/null
35 head1
=$
(add_file sm1 foo1 foo2
)
36 fullhead1
=$
(cd sm1
; git rev-list
--max-count=1 $head1)
38 test_expect_success
'added submodule' "
40 git diff-index -p --submodule=log HEAD >actual &&
41 cat >expected <<-EOF &&
42 Submodule sm1 0000000...$head1 (new submodule)
44 test_cmp expected actual
47 test_expect_success
'added submodule, set diff.submodule' "
48 git config diff.submodule log &&
50 git diff --cached >actual &&
51 cat >expected <<-EOF &&
52 Submodule sm1 0000000...$head1 (new submodule)
54 git config --unset diff.submodule &&
55 test_cmp expected actual
58 test_expect_success
'--submodule=short overrides diff.submodule' "
59 test_config diff.submodule log &&
61 git diff --submodule=short --cached >actual &&
62 cat >expected <<-EOF &&
63 diff --git a/sm1 b/sm1
65 index 0000000..a2c4dab
69 +Subproject commit $fullhead1
71 test_cmp expected actual
75 head2
=$
(add_file sm1 foo3
)
77 test_expect_success
'modified submodule(forward)' "
78 git diff-index -p --submodule=log HEAD >actual &&
79 cat >expected <<-EOF &&
80 Submodule sm1 $head1..$head2:
83 test_cmp expected actual
86 test_expect_success
'modified submodule(forward)' "
87 git diff --submodule=log >actual &&
88 cat >expected <<-EOF &&
89 Submodule sm1 $head1..$head2:
92 test_cmp expected actual
95 test_expect_success
'modified submodule(forward) --submodule' "
96 git diff --submodule >actual &&
97 cat >expected <<-EOF &&
98 Submodule sm1 $head1..$head2:
101 test_cmp expected actual
104 fullhead2
=$
(cd sm1
; git rev-list
--max-count=1 $head2)
105 test_expect_success
'modified submodule(forward) --submodule=short' "
106 git diff --submodule=short >actual &&
107 cat >expected <<-EOF &&
108 diff --git a/sm1 b/sm1
109 index $head1..$head2 160000
113 -Subproject commit $fullhead1
114 +Subproject commit $fullhead2
116 test_cmp expected actual
122 git
reset --hard HEAD~
2 >/dev
/null
&&
123 git rev-parse
--verify HEAD | cut
-c1-7
126 test_expect_success
'modified submodule(backward)' "
127 git diff-index -p --submodule=log HEAD >actual &&
128 cat >expected <<-EOF &&
129 Submodule sm1 $head2..$head3 (rewind):
133 test_cmp expected actual
136 head4
=$
(add_file sm1 foo4 foo5
) &&
137 head4_full
=$
(GIT_DIR
=sm
1/.git git rev-parse
--verify HEAD
)
138 test_expect_success
'modified submodule(backward and forward)' "
139 git diff-index -p --submodule=log HEAD >actual &&
140 cat >expected <<-EOF &&
141 Submodule sm1 $head2...$head4:
147 test_cmp expected actual
153 head5
=$
(git hash-object sm1 | cut
-c1-7) &&
158 test_expect_success
'typechanged submodule(submodule->blob), --cached' "
159 git diff --submodule=log --cached >actual &&
160 cat >expected <<-EOF &&
161 Submodule sm1 41fbea9...0000000 (submodule deleted)
162 diff --git a/sm1 b/sm1
164 index 0000000..9da5fb8
170 test_cmp expected actual
173 test_expect_success
'typechanged submodule(submodule->blob)' "
174 git diff --submodule=log >actual &&
175 cat >expected <<-EOF &&
176 diff --git a/sm1 b/sm1
177 deleted file mode 100644
178 index 9da5fb8..0000000
183 Submodule sm1 0000000...$head4 (new submodule)
185 test_cmp expected actual
189 git checkout-index sm1
190 test_expect_success
'typechanged submodule(submodule->blob)' "
191 git diff-index -p --submodule=log HEAD >actual &&
192 cat >expected <<-EOF &&
193 Submodule sm1 $head4...0000000 (submodule deleted)
194 diff --git a/sm1 b/sm1
196 index 0000000..$head5
202 test_cmp expected actual
206 test_create_repo sm1
&&
207 head6
=$
(add_file sm1 foo6 foo7
)
208 fullhead6
=$
(cd sm1
; git rev-list
--max-count=1 $head6)
209 test_expect_success
'nonexistent commit' "
210 git diff-index -p --submodule=log HEAD >actual &&
211 cat >expected <<-EOF &&
212 Submodule sm1 $head4...$head6 (commits not present)
214 test_cmp expected actual
218 test_expect_success
'typechanged submodule(blob->submodule)' "
219 git diff-index -p --submodule=log HEAD >actual &&
220 cat >expected <<-EOF &&
221 diff --git a/sm1 b/sm1
222 deleted file mode 100644
223 index $head5..0000000
228 Submodule sm1 0000000...$head6 (new submodule)
230 test_cmp expected actual
234 test_expect_success
'submodule is up to date' "
235 git diff-index -p --submodule=log HEAD >actual &&
236 cat >expected <<-EOF &&
238 test_cmp expected actual
241 test_expect_success
'submodule contains untracked content' "
242 echo new > sm1/new-file &&
243 git diff-index -p --submodule=log HEAD >actual &&
244 cat >expected <<-EOF &&
245 Submodule sm1 contains untracked content
247 test_cmp expected actual
250 test_expect_success
'submodule contains untracked content (untracked ignored)' "
251 git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
255 test_expect_success
'submodule contains untracked content (dirty ignored)' "
256 git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
260 test_expect_success
'submodule contains untracked content (all ignored)' "
261 git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual &&
265 test_expect_success
'submodule contains untracked and modifed content' "
266 echo new > sm1/foo6 &&
267 git diff-index -p --submodule=log HEAD >actual &&
268 cat >expected <<-EOF &&
269 Submodule sm1 contains untracked content
270 Submodule sm1 contains modified content
272 test_cmp expected actual
275 test_expect_success
'submodule contains untracked and modifed content (untracked ignored)' "
276 echo new > sm1/foo6 &&
277 git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
278 cat >expected <<-EOF &&
279 Submodule sm1 contains modified content
281 test_cmp expected actual
284 test_expect_success
'submodule contains untracked and modifed content (dirty ignored)' "
285 echo new > sm1/foo6 &&
286 git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
290 test_expect_success
'submodule contains untracked and modifed content (all ignored)' "
291 echo new > sm1/foo6 &&
292 git diff-index -p --ignore-submodules --submodule=log HEAD >actual &&
296 test_expect_success
'submodule contains modifed content' "
297 rm -f sm1/new-file &&
298 git diff-index -p --submodule=log HEAD >actual &&
299 cat >expected <<-EOF &&
300 Submodule sm1 contains modified content
302 test_cmp expected actual
305 (cd sm1
; git commit
-mchange foo6
>/dev
/null
) &&
306 head8
=$
(cd sm1
; git rev-parse
--verify HEAD | cut
-c1-7) &&
307 test_expect_success
'submodule is modified' "
308 git diff-index -p --submodule=log HEAD >actual &&
309 cat >expected <<-EOF &&
310 Submodule sm1 $head6..$head8:
313 test_cmp expected actual
316 test_expect_success
'modified submodule contains untracked content' "
317 echo new > sm1/new-file &&
318 git diff-index -p --submodule=log HEAD >actual &&
319 cat >expected <<-EOF &&
320 Submodule sm1 contains untracked content
321 Submodule sm1 $head6..$head8:
324 test_cmp expected actual
327 test_expect_success
'modified submodule contains untracked content (untracked ignored)' "
328 git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
329 cat >expected <<-EOF &&
330 Submodule sm1 $head6..$head8:
333 test_cmp expected actual
336 test_expect_success
'modified submodule contains untracked content (dirty ignored)' "
337 git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
338 cat >expected <<-EOF &&
339 Submodule sm1 $head6..$head8:
342 test_cmp expected actual
345 test_expect_success
'modified submodule contains untracked content (all ignored)' "
346 git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual &&
350 test_expect_success
'modified submodule contains untracked and modifed content' "
351 echo modification >> sm1/foo6 &&
352 git diff-index -p --submodule=log HEAD >actual &&
353 cat >expected <<-EOF &&
354 Submodule sm1 contains untracked content
355 Submodule sm1 contains modified content
356 Submodule sm1 $head6..$head8:
359 test_cmp expected actual
362 test_expect_success
'modified submodule contains untracked and modifed content (untracked ignored)' "
363 echo modification >> sm1/foo6 &&
364 git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
365 cat >expected <<-EOF &&
366 Submodule sm1 contains modified content
367 Submodule sm1 $head6..$head8:
370 test_cmp expected actual
373 test_expect_success
'modified submodule contains untracked and modifed content (dirty ignored)' "
374 echo modification >> sm1/foo6 &&
375 git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual &&
376 cat >expected <<-EOF &&
377 Submodule sm1 $head6..$head8:
380 test_cmp expected actual
383 test_expect_success
'modified submodule contains untracked and modifed content (all ignored)' "
384 echo modification >> sm1/foo6 &&
385 git diff-index -p --ignore-submodules --submodule=log HEAD >actual &&
389 test_expect_success
'modified submodule contains modifed content' "
390 rm -f sm1/new-file &&
391 git diff-index -p --submodule=log HEAD >actual &&
392 cat >expected <<-EOF &&
393 Submodule sm1 contains modified content
394 Submodule sm1 $head6..$head8:
397 test_cmp expected actual
401 test_expect_success
'deleted submodule' "
402 git diff-index -p --submodule=log HEAD >actual &&
403 cat >expected <<-EOF &&
404 Submodule sm1 $head6...0000000 (submodule deleted)
406 test_cmp expected actual
409 test_create_repo sm2
&&
410 head7
=$
(add_file sm2 foo8 foo9
) &&
413 test_expect_success
'multiple submodules' "
414 git diff-index -p --submodule=log HEAD >actual &&
415 cat >expected <<-EOF &&
416 Submodule sm1 $head6...0000000 (submodule deleted)
417 Submodule sm2 0000000...$head7 (new submodule)
419 test_cmp expected actual
422 test_expect_success
'path filter' "
423 git diff-index -p --submodule=log HEAD sm2 >actual &&
424 cat >expected <<-EOF &&
425 Submodule sm2 0000000...$head7 (new submodule)
427 test_cmp expected actual
431 test_expect_success
'given commit' "
432 git diff-index -p --submodule=log HEAD^ >actual &&
433 cat >expected <<-EOF &&
434 Submodule sm1 $head6...0000000 (submodule deleted)
435 Submodule sm2 0000000...$head7 (new submodule)
437 test_cmp expected actual
440 test_expect_success
'given commit --submodule' "
441 git diff-index -p --submodule HEAD^ >actual &&
442 cat >expected <<-EOF &&
443 Submodule sm1 $head6...0000000 (submodule deleted)
444 Submodule sm2 0000000...$head7 (new submodule)
446 test_cmp expected actual
449 fullhead7
=$
(cd sm2
; git rev-list
--max-count=1 $head7)
451 test_expect_success
'given commit --submodule=short' "
452 git diff-index -p --submodule=short HEAD^ >actual &&
453 cat >expected <<-EOF &&
454 diff --git a/sm1 b/sm1
455 deleted file mode 160000
456 index $head6..0000000
460 -Subproject commit $fullhead6
461 diff --git a/sm2 b/sm2
463 index 0000000..$head7
467 +Subproject commit $fullhead7
469 test_cmp expected actual
472 test_expect_success
'setup .git file for sm2' '
474 REAL="$(pwd)/../.real" &&
476 echo "gitdir: $REAL" >.git)
479 test_expect_success
'diff --submodule with .git file' '
480 git diff --submodule HEAD^ >actual &&
481 cat >expected <<-EOF &&
482 Submodule sm1 $head6...0000000 (submodule deleted)
483 Submodule sm2 0000000...$head7 (new submodule)
485 test_cmp expected actual
488 test_expect_success
'diff --submodule with objects referenced by alternates' '
498 git clone -s ../sub_alt sub &&
501 git commit -m "sub a"
504 sha1_before=$(git rev-parse --short HEAD)
508 sha1_after=$(git rev-parse --short HEAD)
509 echo "Submodule sub $sha1_before..$sha1_after:
515 git checkout origin/master
517 git diff --submodule > ../actual
519 test_cmp expected actual