]>
Commit | Line | Data |
---|---|---|
86140d56 JL |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin | |
4 | # | |
5 | ||
6 | test_description='Support for verbose submodule differences in git diff | |
7 | ||
8 | This test tries to verify the sanity of the --submodule option of git diff. | |
9 | ' | |
10 | ||
11 | . ./test-lib.sh | |
12 | ||
13 | add_file () { | |
14 | sm=$1 | |
15 | shift | |
16 | owd=$(pwd) | |
17 | cd "$sm" | |
18 | for name; do | |
19 | echo "$name" > "$name" && | |
20 | git add "$name" && | |
21 | test_tick && | |
22 | git commit -m "Add $name" | |
23 | done >/dev/null | |
24 | git rev-parse --verify HEAD | cut -c1-7 | |
25 | cd "$owd" | |
26 | } | |
27 | commit_file () { | |
28 | test_tick && | |
29 | git commit "$@" -m "Commit $*" >/dev/null | |
30 | } | |
31 | ||
32 | test_create_repo sm1 && | |
33 | add_file . foo >/dev/null | |
34 | ||
35 | head1=$(add_file sm1 foo1 foo2) | |
36 | ||
37 | test_expect_success 'added submodule' " | |
38 | git add sm1 && | |
39 | git diff-index -p --submodule=log HEAD >actual && | |
40 | diff actual - <<-EOF | |
41 | Submodule sm1 0000000...$head1 (new submodule) | |
42 | EOF | |
43 | " | |
44 | ||
45 | commit_file sm1 && | |
46 | head2=$(add_file sm1 foo3) | |
47 | ||
48 | test_expect_success 'modified submodule(forward)' " | |
49 | git diff-index -p --submodule=log HEAD >actual && | |
50 | diff actual - <<-EOF | |
51 | Submodule sm1 $head1..$head2: | |
52 | > Add foo3 | |
53 | EOF | |
54 | " | |
55 | ||
56 | test_expect_success 'modified submodule(forward)' " | |
57 | git diff --submodule=log >actual && | |
58 | diff actual - <<-EOF | |
59 | Submodule sm1 $head1..$head2: | |
60 | > Add foo3 | |
61 | EOF | |
62 | " | |
63 | ||
64 | test_expect_success 'modified submodule(forward) --submodule' " | |
65 | git diff --submodule >actual && | |
66 | diff actual - <<-EOF | |
67 | Submodule sm1 $head1..$head2: | |
68 | > Add foo3 | |
69 | EOF | |
70 | " | |
71 | ||
72 | fullhead1=$(cd sm1; git rev-list --max-count=1 $head1) | |
73 | fullhead2=$(cd sm1; git rev-list --max-count=1 $head2) | |
74 | test_expect_success 'modified submodule(forward) --submodule=short' " | |
75 | git diff --submodule=short >actual && | |
76 | diff actual - <<-EOF | |
77 | diff --git a/sm1 b/sm1 | |
78 | index $head1..$head2 160000 | |
79 | --- a/sm1 | |
80 | +++ b/sm1 | |
81 | @@ -1 +1 @@ | |
82 | -Subproject commit $fullhead1 | |
83 | +Subproject commit $fullhead2 | |
84 | EOF | |
85 | " | |
86 | ||
87 | commit_file sm1 && | |
fd4ec4f2 | 88 | head3=$(cd sm1 && |
86140d56 | 89 | git reset --hard HEAD~2 >/dev/null && |
fd4ec4f2 JL |
90 | git rev-parse --verify HEAD | cut -c1-7 |
91 | ) | |
86140d56 JL |
92 | |
93 | test_expect_success 'modified submodule(backward)' " | |
94 | git diff-index -p --submodule=log HEAD >actual && | |
95 | diff actual - <<-EOF | |
96 | Submodule sm1 $head2..$head3 (rewind): | |
97 | < Add foo3 | |
98 | < Add foo2 | |
99 | EOF | |
100 | " | |
101 | ||
102 | head4=$(add_file sm1 foo4 foo5) && | |
103 | head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD) | |
104 | test_expect_success 'modified submodule(backward and forward)' " | |
105 | git diff-index -p --submodule=log HEAD >actual && | |
106 | diff actual - <<-EOF | |
107 | Submodule sm1 $head2...$head4: | |
108 | > Add foo5 | |
109 | > Add foo4 | |
110 | < Add foo3 | |
111 | < Add foo2 | |
112 | EOF | |
113 | " | |
114 | ||
115 | commit_file sm1 && | |
116 | mv sm1 sm1-bak && | |
117 | echo sm1 >sm1 && | |
118 | head5=$(git hash-object sm1 | cut -c1-7) && | |
119 | git add sm1 && | |
120 | rm -f sm1 && | |
121 | mv sm1-bak sm1 | |
122 | ||
123 | test_expect_success 'typechanged submodule(submodule->blob), --cached' " | |
124 | git diff --submodule=log --cached >actual && | |
125 | diff actual - <<-EOF | |
126 | Submodule sm1 41fbea9...0000000 (submodule deleted) | |
127 | diff --git a/sm1 b/sm1 | |
128 | new file mode 100644 | |
129 | index 0000000..9da5fb8 | |
130 | --- /dev/null | |
131 | +++ b/sm1 | |
132 | @@ -0,0 +1 @@ | |
133 | +sm1 | |
134 | EOF | |
135 | " | |
136 | ||
137 | test_expect_success 'typechanged submodule(submodule->blob)' " | |
138 | git diff --submodule=log >actual && | |
139 | diff actual - <<-EOF | |
140 | diff --git a/sm1 b/sm1 | |
141 | deleted file mode 100644 | |
142 | index 9da5fb8..0000000 | |
143 | --- a/sm1 | |
144 | +++ /dev/null | |
145 | @@ -1 +0,0 @@ | |
146 | -sm1 | |
147 | Submodule sm1 0000000...$head4 (new submodule) | |
148 | EOF | |
149 | " | |
150 | ||
151 | rm -rf sm1 && | |
152 | git checkout-index sm1 | |
153 | test_expect_success 'typechanged submodule(submodule->blob)' " | |
154 | git diff-index -p --submodule=log HEAD >actual && | |
155 | diff actual - <<-EOF | |
156 | Submodule sm1 $head4...0000000 (submodule deleted) | |
157 | diff --git a/sm1 b/sm1 | |
158 | new file mode 100644 | |
159 | index 0000000..$head5 | |
160 | --- /dev/null | |
161 | +++ b/sm1 | |
162 | @@ -0,0 +1 @@ | |
163 | +sm1 | |
164 | EOF | |
165 | " | |
166 | ||
167 | rm -f sm1 && | |
168 | test_create_repo sm1 && | |
169 | head6=$(add_file sm1 foo6 foo7) | |
170 | fullhead6=$(cd sm1; git rev-list --max-count=1 $head6) | |
171 | test_expect_success 'nonexistent commit' " | |
172 | git diff-index -p --submodule=log HEAD >actual && | |
173 | diff actual - <<-EOF | |
174 | Submodule sm1 $head4...$head6 (commits not present) | |
175 | EOF | |
176 | " | |
177 | ||
178 | commit_file | |
179 | test_expect_success 'typechanged submodule(blob->submodule)' " | |
180 | git diff-index -p --submodule=log HEAD >actual && | |
181 | diff actual - <<-EOF | |
182 | diff --git a/sm1 b/sm1 | |
183 | deleted file mode 100644 | |
184 | index $head5..0000000 | |
185 | --- a/sm1 | |
186 | +++ /dev/null | |
187 | @@ -1 +0,0 @@ | |
188 | -sm1 | |
189 | Submodule sm1 0000000...$head6 (new submodule) | |
190 | EOF | |
191 | " | |
192 | ||
193 | commit_file sm1 && | |
721ceec1 JL |
194 | test_expect_success 'submodule is up to date' " |
195 | git diff-index -p --submodule=log HEAD >actual && | |
196 | diff actual - <<-EOF | |
197 | EOF | |
198 | " | |
199 | ||
200 | test_expect_success 'submodule contains untracked content' " | |
201 | echo new > sm1/new-file && | |
202 | git diff-index -p --submodule=log HEAD >actual && | |
203 | diff actual - <<-EOF | |
c7e1a736 | 204 | Submodule sm1 contains untracked content |
721ceec1 JL |
205 | EOF |
206 | " | |
207 | ||
dd44d419 JL |
208 | test_expect_success 'submodule contains untracked content (untracked ignored)' " |
209 | git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual && | |
6ed7ddaa | 210 | ! test -s actual |
dd44d419 JL |
211 | " |
212 | ||
213 | test_expect_success 'submodule contains untracked content (dirty ignored)' " | |
214 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && | |
6ed7ddaa | 215 | ! test -s actual |
dd44d419 JL |
216 | " |
217 | ||
218 | test_expect_success 'submodule contains untracked content (all ignored)' " | |
219 | git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual && | |
6ed7ddaa | 220 | ! test -s actual |
dd44d419 JL |
221 | " |
222 | ||
721ceec1 JL |
223 | test_expect_success 'submodule contains untracked and modifed content' " |
224 | echo new > sm1/foo6 && | |
225 | git diff-index -p --submodule=log HEAD >actual && | |
226 | diff actual - <<-EOF | |
c7e1a736 JL |
227 | Submodule sm1 contains untracked content |
228 | Submodule sm1 contains modified content | |
721ceec1 JL |
229 | EOF |
230 | " | |
231 | ||
dd44d419 JL |
232 | test_expect_success 'submodule contains untracked and modifed content (untracked ignored)' " |
233 | echo new > sm1/foo6 && | |
234 | git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual && | |
235 | diff actual - <<-EOF | |
236 | Submodule sm1 contains modified content | |
237 | EOF | |
238 | " | |
239 | ||
240 | test_expect_success 'submodule contains untracked and modifed content (dirty ignored)' " | |
241 | echo new > sm1/foo6 && | |
242 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && | |
6ed7ddaa | 243 | ! test -s actual |
dd44d419 JL |
244 | " |
245 | ||
246 | test_expect_success 'submodule contains untracked and modifed content (all ignored)' " | |
247 | echo new > sm1/foo6 && | |
248 | git diff-index -p --ignore-submodules --submodule=log HEAD >actual && | |
6ed7ddaa | 249 | ! test -s actual |
dd44d419 JL |
250 | " |
251 | ||
721ceec1 JL |
252 | test_expect_success 'submodule contains modifed content' " |
253 | rm -f sm1/new-file && | |
254 | git diff-index -p --submodule=log HEAD >actual && | |
255 | diff actual - <<-EOF | |
c7e1a736 | 256 | Submodule sm1 contains modified content |
721ceec1 JL |
257 | EOF |
258 | " | |
259 | ||
260 | (cd sm1; git commit -mchange foo6 >/dev/null) && | |
261 | head8=$(cd sm1; git rev-parse --verify HEAD | cut -c1-7) && | |
262 | test_expect_success 'submodule is modified' " | |
263 | git diff-index -p --submodule=log HEAD >actual && | |
264 | diff actual - <<-EOF | |
265 | Submodule sm1 $head6..$head8: | |
266 | > change | |
267 | EOF | |
268 | " | |
269 | ||
270 | test_expect_success 'modified submodule contains untracked content' " | |
271 | echo new > sm1/new-file && | |
272 | git diff-index -p --submodule=log HEAD >actual && | |
273 | diff actual - <<-EOF | |
c7e1a736 JL |
274 | Submodule sm1 contains untracked content |
275 | Submodule sm1 $head6..$head8: | |
721ceec1 JL |
276 | > change |
277 | EOF | |
278 | " | |
279 | ||
dd44d419 JL |
280 | test_expect_success 'modified submodule contains untracked content (untracked ignored)' " |
281 | git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual && | |
282 | diff actual - <<-EOF | |
283 | Submodule sm1 $head6..$head8: | |
284 | > change | |
285 | EOF | |
286 | " | |
287 | ||
288 | test_expect_success 'modified submodule contains untracked content (dirty ignored)' " | |
289 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && | |
290 | diff actual - <<-EOF | |
291 | Submodule sm1 $head6..$head8: | |
292 | > change | |
293 | EOF | |
294 | " | |
295 | ||
296 | test_expect_success 'modified submodule contains untracked content (all ignored)' " | |
297 | git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual && | |
6ed7ddaa | 298 | ! test -s actual |
dd44d419 JL |
299 | " |
300 | ||
721ceec1 JL |
301 | test_expect_success 'modified submodule contains untracked and modifed content' " |
302 | echo modification >> sm1/foo6 && | |
303 | git diff-index -p --submodule=log HEAD >actual && | |
304 | diff actual - <<-EOF | |
c7e1a736 JL |
305 | Submodule sm1 contains untracked content |
306 | Submodule sm1 contains modified content | |
307 | Submodule sm1 $head6..$head8: | |
721ceec1 JL |
308 | > change |
309 | EOF | |
310 | " | |
311 | ||
dd44d419 JL |
312 | test_expect_success 'modified submodule contains untracked and modifed content (untracked ignored)' " |
313 | echo modification >> sm1/foo6 && | |
314 | git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual && | |
315 | diff actual - <<-EOF | |
316 | Submodule sm1 contains modified content | |
317 | Submodule sm1 $head6..$head8: | |
318 | > change | |
319 | EOF | |
320 | " | |
321 | ||
322 | test_expect_success 'modified submodule contains untracked and modifed content (dirty ignored)' " | |
323 | echo modification >> sm1/foo6 && | |
324 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && | |
325 | diff actual - <<-EOF | |
326 | Submodule sm1 $head6..$head8: | |
327 | > change | |
328 | EOF | |
329 | " | |
330 | ||
331 | test_expect_success 'modified submodule contains untracked and modifed content (all ignored)' " | |
332 | echo modification >> sm1/foo6 && | |
333 | git diff-index -p --ignore-submodules --submodule=log HEAD >actual && | |
6ed7ddaa | 334 | ! test -s actual |
dd44d419 JL |
335 | " |
336 | ||
721ceec1 JL |
337 | test_expect_success 'modified submodule contains modifed content' " |
338 | rm -f sm1/new-file && | |
339 | git diff-index -p --submodule=log HEAD >actual && | |
340 | diff actual - <<-EOF | |
c7e1a736 JL |
341 | Submodule sm1 contains modified content |
342 | Submodule sm1 $head6..$head8: | |
721ceec1 JL |
343 | > change |
344 | EOF | |
345 | " | |
346 | ||
86140d56 JL |
347 | rm -rf sm1 |
348 | test_expect_success 'deleted submodule' " | |
349 | git diff-index -p --submodule=log HEAD >actual && | |
350 | diff actual - <<-EOF | |
351 | Submodule sm1 $head6...0000000 (submodule deleted) | |
352 | EOF | |
353 | " | |
354 | ||
355 | test_create_repo sm2 && | |
356 | head7=$(add_file sm2 foo8 foo9) && | |
357 | git add sm2 | |
358 | ||
359 | test_expect_success 'multiple submodules' " | |
360 | git diff-index -p --submodule=log HEAD >actual && | |
361 | diff actual - <<-EOF | |
362 | Submodule sm1 $head6...0000000 (submodule deleted) | |
363 | Submodule sm2 0000000...$head7 (new submodule) | |
364 | EOF | |
365 | " | |
366 | ||
367 | test_expect_success 'path filter' " | |
368 | git diff-index -p --submodule=log HEAD sm2 >actual && | |
369 | diff actual - <<-EOF | |
370 | Submodule sm2 0000000...$head7 (new submodule) | |
371 | EOF | |
372 | " | |
373 | ||
374 | commit_file sm2 | |
375 | test_expect_success 'given commit' " | |
376 | git diff-index -p --submodule=log HEAD^ >actual && | |
377 | diff actual - <<-EOF | |
378 | Submodule sm1 $head6...0000000 (submodule deleted) | |
379 | Submodule sm2 0000000...$head7 (new submodule) | |
380 | EOF | |
381 | " | |
382 | ||
383 | test_expect_success 'given commit --submodule' " | |
384 | git diff-index -p --submodule HEAD^ >actual && | |
385 | diff actual - <<-EOF | |
386 | Submodule sm1 $head6...0000000 (submodule deleted) | |
387 | Submodule sm2 0000000...$head7 (new submodule) | |
388 | EOF | |
389 | " | |
390 | ||
391 | fullhead7=$(cd sm2; git rev-list --max-count=1 $head7) | |
392 | ||
393 | test_expect_success 'given commit --submodule=short' " | |
394 | git diff-index -p --submodule=short HEAD^ >actual && | |
395 | diff actual - <<-EOF | |
396 | diff --git a/sm1 b/sm1 | |
397 | deleted file mode 160000 | |
398 | index $head6..0000000 | |
399 | --- a/sm1 | |
400 | +++ /dev/null | |
401 | @@ -1 +0,0 @@ | |
402 | -Subproject commit $fullhead6 | |
403 | diff --git a/sm2 b/sm2 | |
404 | new file mode 160000 | |
405 | index 0000000..$head7 | |
406 | --- /dev/null | |
407 | +++ b/sm2 | |
408 | @@ -0,0 +1 @@ | |
409 | +Subproject commit $fullhead7 | |
410 | EOF | |
411 | " | |
412 | ||
eee49b6c JL |
413 | test_expect_success 'setup .git file for sm2' ' |
414 | (cd sm2 && | |
415 | REAL="$(pwd)/../.real" && | |
416 | mv .git "$REAL" | |
417 | echo "gitdir: $REAL" >.git) | |
418 | ' | |
419 | ||
420 | test_expect_success 'diff --submodule with .git file' ' | |
421 | git diff --submodule HEAD^ >actual && | |
422 | diff actual - <<-EOF | |
423 | Submodule sm1 $head6...0000000 (submodule deleted) | |
424 | Submodule sm2 0000000...$head7 (new submodule) | |
425 | EOF | |
426 | ' | |
427 | ||
86140d56 | 428 | test_done |