]>
Commit | Line | Data |
---|---|---|
86140d56 JL |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin | |
de6029a2 | 4 | # Copyright (c) 2011 Alexey Shumkin (+ non-UTF-8 commit encoding tests) |
86140d56 JL |
5 | # |
6 | ||
7 | test_description='Support for verbose submodule differences in git diff | |
8 | ||
9 | This test tries to verify the sanity of the --submodule option of git diff. | |
10 | ' | |
11 | ||
8f37854b | 12 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
334afbc7 JS |
13 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
14 | ||
86140d56 JL |
15 | . ./test-lib.sh |
16 | ||
ee3efaf6 AS |
17 | # Tested non-UTF-8 encoding |
18 | test_encoding="ISO8859-1" | |
19 | ||
de6029a2 AS |
20 | # String "added" in German (translated with Google Translate), encoded in UTF-8, |
21 | # used in sample commit log messages in add_file() function below. | |
22 | added=$(printf "hinzugef\303\274gt") | |
86140d56 | 23 | add_file () { |
2934975f RR |
24 | ( |
25 | cd "$1" && | |
26 | shift && | |
27 | for name | |
28 | do | |
29 | echo "$name" >"$name" && | |
30 | git add "$name" && | |
31 | test_tick && | |
e6ce2be2 PT |
32 | # "git commit -m" would break MinGW, as Windows refuse to pass |
33 | # $test_encoding encoded parameter to git. | |
34 | echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding | | |
35 | git -c "i18n.commitEncoding=$test_encoding" commit -F - | |
2934975f RR |
36 | done >/dev/null && |
37 | git rev-parse --short --verify HEAD | |
38 | ) | |
86140d56 JL |
39 | } |
40 | commit_file () { | |
41 | test_tick && | |
42 | git commit "$@" -m "Commit $*" >/dev/null | |
43 | } | |
44 | ||
45 | test_create_repo sm1 && | |
46 | add_file . foo >/dev/null | |
47 | ||
48 | head1=$(add_file sm1 foo1 foo2) | |
20fa5385 | 49 | fullhead1=$(cd sm1; git rev-parse --verify HEAD) |
86140d56 | 50 | |
a1549f9b | 51 | test_expect_success 'added submodule' ' |
86140d56 JL |
52 | git add sm1 && |
53 | git diff-index -p --submodule=log HEAD >actual && | |
f8d186bb | 54 | cat >expected <<-EOF && |
a1549f9b RR |
55 | Submodule sm1 0000000...$head1 (new submodule) |
56 | EOF | |
f8d186bb | 57 | test_cmp expected actual |
a1549f9b | 58 | ' |
86140d56 | 59 | |
a1549f9b | 60 | test_expect_success 'added submodule, set diff.submodule' ' |
c47ef57c RR |
61 | git config diff.submodule log && |
62 | git add sm1 && | |
63 | git diff --cached >actual && | |
64 | cat >expected <<-EOF && | |
a1549f9b RR |
65 | Submodule sm1 0000000...$head1 (new submodule) |
66 | EOF | |
c47ef57c RR |
67 | git config --unset diff.submodule && |
68 | test_cmp expected actual | |
a1549f9b | 69 | ' |
c47ef57c | 70 | |
a1549f9b | 71 | test_expect_success '--submodule=short overrides diff.submodule' ' |
c47ef57c RR |
72 | test_config diff.submodule log && |
73 | git add sm1 && | |
74 | git diff --submodule=short --cached >actual && | |
75 | cat >expected <<-EOF && | |
a1549f9b RR |
76 | diff --git a/sm1 b/sm1 |
77 | new file mode 160000 | |
78 | index 0000000..$head1 | |
79 | --- /dev/null | |
80 | +++ b/sm1 | |
81 | @@ -0,0 +1 @@ | |
82 | +Subproject commit $fullhead1 | |
83 | EOF | |
c47ef57c | 84 | test_cmp expected actual |
a1549f9b | 85 | ' |
c47ef57c | 86 | |
d9c552f1 JK |
87 | test_expect_success 'diff.submodule does not affect plumbing' ' |
88 | test_config diff.submodule log && | |
89 | git diff-index -p HEAD >actual && | |
90 | cat >expected <<-EOF && | |
91 | diff --git a/sm1 b/sm1 | |
92 | new file mode 160000 | |
3b13af9d | 93 | index 0000000..$head1 |
d9c552f1 JK |
94 | --- /dev/null |
95 | +++ b/sm1 | |
96 | @@ -0,0 +1 @@ | |
97 | +Subproject commit $fullhead1 | |
98 | EOF | |
99 | test_cmp expected actual | |
100 | ' | |
101 | ||
86140d56 JL |
102 | commit_file sm1 && |
103 | head2=$(add_file sm1 foo3) | |
104 | ||
ecaee805 | 105 | test_expect_success 'modified submodule(forward)' ' |
86140d56 | 106 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 107 | cat >expected <<-EOF && |
a1549f9b | 108 | Submodule sm1 $head1..$head2: |
de6029a2 | 109 | > Add foo3 ($added foo3) |
a1549f9b | 110 | EOF |
f8d186bb | 111 | test_cmp expected actual |
a1549f9b | 112 | ' |
86140d56 | 113 | |
ecaee805 | 114 | test_expect_success 'modified submodule(forward)' ' |
86140d56 | 115 | git diff --submodule=log >actual && |
f8d186bb | 116 | cat >expected <<-EOF && |
a1549f9b | 117 | Submodule sm1 $head1..$head2: |
de6029a2 | 118 | > Add foo3 ($added foo3) |
a1549f9b | 119 | EOF |
f8d186bb | 120 | test_cmp expected actual |
a1549f9b | 121 | ' |
86140d56 | 122 | |
ecaee805 | 123 | test_expect_success 'modified submodule(forward) --submodule' ' |
86140d56 | 124 | git diff --submodule >actual && |
f8d186bb | 125 | cat >expected <<-EOF && |
a1549f9b | 126 | Submodule sm1 $head1..$head2: |
de6029a2 | 127 | > Add foo3 ($added foo3) |
a1549f9b | 128 | EOF |
f8d186bb | 129 | test_cmp expected actual |
a1549f9b | 130 | ' |
86140d56 | 131 | |
20fa5385 | 132 | fullhead2=$(cd sm1; git rev-parse --verify HEAD) |
a1549f9b | 133 | test_expect_success 'modified submodule(forward) --submodule=short' ' |
86140d56 | 134 | git diff --submodule=short >actual && |
f8d186bb | 135 | cat >expected <<-EOF && |
a1549f9b RR |
136 | diff --git a/sm1 b/sm1 |
137 | index $head1..$head2 160000 | |
138 | --- a/sm1 | |
139 | +++ b/sm1 | |
140 | @@ -1 +1 @@ | |
141 | -Subproject commit $fullhead1 | |
142 | +Subproject commit $fullhead2 | |
143 | EOF | |
f8d186bb | 144 | test_cmp expected actual |
a1549f9b | 145 | ' |
86140d56 JL |
146 | |
147 | commit_file sm1 && | |
18a82692 JN |
148 | head3=$( |
149 | cd sm1 && | |
150 | git reset --hard HEAD~2 >/dev/null && | |
20fa5385 | 151 | git rev-parse --short --verify HEAD |
fd4ec4f2 | 152 | ) |
86140d56 | 153 | |
ecaee805 | 154 | test_expect_success 'modified submodule(backward)' ' |
86140d56 | 155 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 156 | cat >expected <<-EOF && |
a1549f9b | 157 | Submodule sm1 $head2..$head3 (rewind): |
de6029a2 AS |
158 | < Add foo3 ($added foo3) |
159 | < Add foo2 ($added foo2) | |
a1549f9b | 160 | EOF |
f8d186bb | 161 | test_cmp expected actual |
a1549f9b | 162 | ' |
86140d56 | 163 | |
a1549f9b | 164 | head4=$(add_file sm1 foo4 foo5) |
ecaee805 | 165 | test_expect_success 'modified submodule(backward and forward)' ' |
86140d56 | 166 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 167 | cat >expected <<-EOF && |
a1549f9b | 168 | Submodule sm1 $head2...$head4: |
de6029a2 AS |
169 | > Add foo5 ($added foo5) |
170 | > Add foo4 ($added foo4) | |
171 | < Add foo3 ($added foo3) | |
172 | < Add foo2 ($added foo2) | |
a1549f9b | 173 | EOF |
f8d186bb | 174 | test_cmp expected actual |
a1549f9b | 175 | ' |
86140d56 JL |
176 | |
177 | commit_file sm1 && | |
178 | mv sm1 sm1-bak && | |
179 | echo sm1 >sm1 && | |
180 | head5=$(git hash-object sm1 | cut -c1-7) && | |
181 | git add sm1 && | |
182 | rm -f sm1 && | |
183 | mv sm1-bak sm1 | |
184 | ||
a1549f9b | 185 | test_expect_success 'typechanged submodule(submodule->blob), --cached' ' |
86140d56 | 186 | git diff --submodule=log --cached >actual && |
f8d186bb | 187 | cat >expected <<-EOF && |
a1549f9b RR |
188 | Submodule sm1 $head4...0000000 (submodule deleted) |
189 | diff --git a/sm1 b/sm1 | |
190 | new file mode 100644 | |
191 | index 0000000..$head5 | |
192 | --- /dev/null | |
193 | +++ b/sm1 | |
194 | @@ -0,0 +1 @@ | |
195 | +sm1 | |
196 | EOF | |
f8d186bb | 197 | test_cmp expected actual |
a1549f9b | 198 | ' |
86140d56 | 199 | |
a1549f9b | 200 | test_expect_success 'typechanged submodule(submodule->blob)' ' |
86140d56 | 201 | git diff --submodule=log >actual && |
f8d186bb | 202 | cat >expected <<-EOF && |
a1549f9b RR |
203 | diff --git a/sm1 b/sm1 |
204 | deleted file mode 100644 | |
205 | index $head5..0000000 | |
206 | --- a/sm1 | |
207 | +++ /dev/null | |
208 | @@ -1 +0,0 @@ | |
209 | -sm1 | |
210 | Submodule sm1 0000000...$head4 (new submodule) | |
211 | EOF | |
f8d186bb | 212 | test_cmp expected actual |
a1549f9b | 213 | ' |
86140d56 JL |
214 | |
215 | rm -rf sm1 && | |
216 | git checkout-index sm1 | |
a1549f9b | 217 | test_expect_success 'typechanged submodule(submodule->blob)' ' |
86140d56 | 218 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 219 | cat >expected <<-EOF && |
a1549f9b RR |
220 | Submodule sm1 $head4...0000000 (submodule deleted) |
221 | diff --git a/sm1 b/sm1 | |
222 | new file mode 100644 | |
223 | index 0000000..$head5 | |
224 | --- /dev/null | |
225 | +++ b/sm1 | |
226 | @@ -0,0 +1 @@ | |
227 | +sm1 | |
228 | EOF | |
f8d186bb | 229 | test_cmp expected actual |
a1549f9b | 230 | ' |
86140d56 JL |
231 | |
232 | rm -f sm1 && | |
233 | test_create_repo sm1 && | |
234 | head6=$(add_file sm1 foo6 foo7) | |
20fa5385 | 235 | fullhead6=$(cd sm1; git rev-parse --verify HEAD) |
a1549f9b | 236 | test_expect_success 'nonexistent commit' ' |
86140d56 | 237 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 238 | cat >expected <<-EOF && |
a1549f9b RR |
239 | Submodule sm1 $head4...$head6 (commits not present) |
240 | EOF | |
f8d186bb | 241 | test_cmp expected actual |
a1549f9b | 242 | ' |
86140d56 JL |
243 | |
244 | commit_file | |
a1549f9b | 245 | test_expect_success 'typechanged submodule(blob->submodule)' ' |
86140d56 | 246 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 247 | cat >expected <<-EOF && |
a1549f9b RR |
248 | diff --git a/sm1 b/sm1 |
249 | deleted file mode 100644 | |
250 | index $head5..0000000 | |
251 | --- a/sm1 | |
252 | +++ /dev/null | |
253 | @@ -1 +0,0 @@ | |
254 | -sm1 | |
255 | Submodule sm1 0000000...$head6 (new submodule) | |
256 | EOF | |
f8d186bb | 257 | test_cmp expected actual |
a1549f9b | 258 | ' |
86140d56 JL |
259 | |
260 | commit_file sm1 && | |
a1549f9b | 261 | test_expect_success 'submodule is up to date' ' |
721ceec1 | 262 | git diff-index -p --submodule=log HEAD >actual && |
1c5e94f4 | 263 | test_must_be_empty actual |
a1549f9b | 264 | ' |
721ceec1 | 265 | |
a1549f9b | 266 | test_expect_success 'submodule contains untracked content' ' |
721ceec1 | 267 | echo new > sm1/new-file && |
8ef93124 | 268 | git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual && |
f8d186bb | 269 | cat >expected <<-EOF && |
a1549f9b RR |
270 | Submodule sm1 contains untracked content |
271 | EOF | |
f8d186bb | 272 | test_cmp expected actual |
a1549f9b | 273 | ' |
721ceec1 | 274 | |
a1549f9b | 275 | test_expect_success 'submodule contains untracked content (untracked ignored)' ' |
8ef93124 | 276 | git diff-index -p --submodule=log HEAD >actual && |
ec10b018 | 277 | test_must_be_empty actual |
a1549f9b | 278 | ' |
dd44d419 | 279 | |
a1549f9b | 280 | test_expect_success 'submodule contains untracked content (dirty ignored)' ' |
dd44d419 | 281 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && |
ec10b018 | 282 | test_must_be_empty actual |
a1549f9b | 283 | ' |
dd44d419 | 284 | |
a1549f9b | 285 | test_expect_success 'submodule contains untracked content (all ignored)' ' |
dd44d419 | 286 | git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual && |
ec10b018 | 287 | test_must_be_empty actual |
a1549f9b | 288 | ' |
dd44d419 | 289 | |
4dc8b1c1 | 290 | test_expect_success 'submodule contains untracked and modified content' ' |
721ceec1 | 291 | echo new > sm1/foo6 && |
8ef93124 | 292 | git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual && |
f8d186bb | 293 | cat >expected <<-EOF && |
a1549f9b RR |
294 | Submodule sm1 contains untracked content |
295 | Submodule sm1 contains modified content | |
296 | EOF | |
f8d186bb | 297 | test_cmp expected actual |
a1549f9b | 298 | ' |
721ceec1 | 299 | |
4dc8b1c1 | 300 | test_expect_success 'submodule contains untracked and modified content (untracked ignored)' ' |
dd44d419 | 301 | echo new > sm1/foo6 && |
8ef93124 | 302 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 303 | cat >expected <<-EOF && |
a1549f9b RR |
304 | Submodule sm1 contains modified content |
305 | EOF | |
f8d186bb | 306 | test_cmp expected actual |
a1549f9b | 307 | ' |
dd44d419 | 308 | |
4dc8b1c1 | 309 | test_expect_success 'submodule contains untracked and modified content (dirty ignored)' ' |
dd44d419 JL |
310 | echo new > sm1/foo6 && |
311 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && | |
ec10b018 | 312 | test_must_be_empty actual |
a1549f9b | 313 | ' |
dd44d419 | 314 | |
4dc8b1c1 | 315 | test_expect_success 'submodule contains untracked and modified content (all ignored)' ' |
dd44d419 JL |
316 | echo new > sm1/foo6 && |
317 | git diff-index -p --ignore-submodules --submodule=log HEAD >actual && | |
ec10b018 | 318 | test_must_be_empty actual |
a1549f9b | 319 | ' |
dd44d419 | 320 | |
4dc8b1c1 | 321 | test_expect_success 'submodule contains modified content' ' |
721ceec1 JL |
322 | rm -f sm1/new-file && |
323 | git diff-index -p --submodule=log HEAD >actual && | |
f8d186bb | 324 | cat >expected <<-EOF && |
a1549f9b RR |
325 | Submodule sm1 contains modified content |
326 | EOF | |
f8d186bb | 327 | test_cmp expected actual |
a1549f9b | 328 | ' |
721ceec1 JL |
329 | |
330 | (cd sm1; git commit -mchange foo6 >/dev/null) && | |
20fa5385 | 331 | head8=$(cd sm1; git rev-parse --short --verify HEAD) && |
a1549f9b | 332 | test_expect_success 'submodule is modified' ' |
721ceec1 | 333 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 334 | cat >expected <<-EOF && |
a1549f9b RR |
335 | Submodule sm1 $head6..$head8: |
336 | > change | |
337 | EOF | |
f8d186bb | 338 | test_cmp expected actual |
a1549f9b | 339 | ' |
721ceec1 | 340 | |
a1549f9b | 341 | test_expect_success 'modified submodule contains untracked content' ' |
721ceec1 | 342 | echo new > sm1/new-file && |
8ef93124 | 343 | git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual && |
f8d186bb | 344 | cat >expected <<-EOF && |
a1549f9b RR |
345 | Submodule sm1 contains untracked content |
346 | Submodule sm1 $head6..$head8: | |
347 | > change | |
348 | EOF | |
f8d186bb | 349 | test_cmp expected actual |
a1549f9b | 350 | ' |
721ceec1 | 351 | |
a1549f9b | 352 | test_expect_success 'modified submodule contains untracked content (untracked ignored)' ' |
8ef93124 | 353 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 354 | cat >expected <<-EOF && |
a1549f9b RR |
355 | Submodule sm1 $head6..$head8: |
356 | > change | |
357 | EOF | |
f8d186bb | 358 | test_cmp expected actual |
a1549f9b | 359 | ' |
dd44d419 | 360 | |
a1549f9b | 361 | test_expect_success 'modified submodule contains untracked content (dirty ignored)' ' |
dd44d419 | 362 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && |
f8d186bb | 363 | cat >expected <<-EOF && |
a1549f9b RR |
364 | Submodule sm1 $head6..$head8: |
365 | > change | |
366 | EOF | |
f8d186bb | 367 | test_cmp expected actual |
a1549f9b | 368 | ' |
dd44d419 | 369 | |
a1549f9b | 370 | test_expect_success 'modified submodule contains untracked content (all ignored)' ' |
dd44d419 | 371 | git diff-index -p --ignore-submodules=all --submodule=log HEAD >actual && |
ec10b018 | 372 | test_must_be_empty actual |
a1549f9b | 373 | ' |
dd44d419 | 374 | |
4dc8b1c1 | 375 | test_expect_success 'modified submodule contains untracked and modified content' ' |
721ceec1 | 376 | echo modification >> sm1/foo6 && |
8ef93124 | 377 | git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual && |
f8d186bb | 378 | cat >expected <<-EOF && |
a1549f9b RR |
379 | Submodule sm1 contains untracked content |
380 | Submodule sm1 contains modified content | |
381 | Submodule sm1 $head6..$head8: | |
382 | > change | |
383 | EOF | |
f8d186bb | 384 | test_cmp expected actual |
a1549f9b | 385 | ' |
721ceec1 | 386 | |
4dc8b1c1 | 387 | test_expect_success 'modified submodule contains untracked and modified content (untracked ignored)' ' |
dd44d419 | 388 | echo modification >> sm1/foo6 && |
8ef93124 | 389 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 390 | cat >expected <<-EOF && |
a1549f9b RR |
391 | Submodule sm1 contains modified content |
392 | Submodule sm1 $head6..$head8: | |
393 | > change | |
394 | EOF | |
f8d186bb | 395 | test_cmp expected actual |
a1549f9b | 396 | ' |
dd44d419 | 397 | |
4dc8b1c1 | 398 | test_expect_success 'modified submodule contains untracked and modified content (dirty ignored)' ' |
dd44d419 JL |
399 | echo modification >> sm1/foo6 && |
400 | git diff-index -p --ignore-submodules=dirty --submodule=log HEAD >actual && | |
f8d186bb | 401 | cat >expected <<-EOF && |
a1549f9b RR |
402 | Submodule sm1 $head6..$head8: |
403 | > change | |
404 | EOF | |
f8d186bb | 405 | test_cmp expected actual |
a1549f9b | 406 | ' |
dd44d419 | 407 | |
4dc8b1c1 | 408 | test_expect_success 'modified submodule contains untracked and modified content (all ignored)' ' |
dd44d419 JL |
409 | echo modification >> sm1/foo6 && |
410 | git diff-index -p --ignore-submodules --submodule=log HEAD >actual && | |
ec10b018 | 411 | test_must_be_empty actual |
a1549f9b | 412 | ' |
dd44d419 | 413 | |
4dc8b1c1 | 414 | test_expect_success 'modified submodule contains modified content' ' |
721ceec1 JL |
415 | rm -f sm1/new-file && |
416 | git diff-index -p --submodule=log HEAD >actual && | |
f8d186bb | 417 | cat >expected <<-EOF && |
a1549f9b RR |
418 | Submodule sm1 contains modified content |
419 | Submodule sm1 $head6..$head8: | |
420 | > change | |
421 | EOF | |
f8d186bb | 422 | test_cmp expected actual |
a1549f9b | 423 | ' |
721ceec1 | 424 | |
86140d56 | 425 | rm -rf sm1 |
a1549f9b | 426 | test_expect_success 'deleted submodule' ' |
86140d56 | 427 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 428 | cat >expected <<-EOF && |
a1549f9b RR |
429 | Submodule sm1 $head6...0000000 (submodule deleted) |
430 | EOF | |
f8d186bb | 431 | test_cmp expected actual |
a1549f9b | 432 | ' |
86140d56 | 433 | |
17f2f88c JK |
434 | test_expect_success 'create second submodule' ' |
435 | test_create_repo sm2 && | |
436 | head7=$(add_file sm2 foo8 foo9) && | |
437 | git add sm2 | |
438 | ' | |
86140d56 | 439 | |
a1549f9b | 440 | test_expect_success 'multiple submodules' ' |
86140d56 | 441 | git diff-index -p --submodule=log HEAD >actual && |
f8d186bb | 442 | cat >expected <<-EOF && |
a1549f9b RR |
443 | Submodule sm1 $head6...0000000 (submodule deleted) |
444 | Submodule sm2 0000000...$head7 (new submodule) | |
445 | EOF | |
f8d186bb | 446 | test_cmp expected actual |
a1549f9b | 447 | ' |
86140d56 | 448 | |
a1549f9b | 449 | test_expect_success 'path filter' ' |
86140d56 | 450 | git diff-index -p --submodule=log HEAD sm2 >actual && |
f8d186bb | 451 | cat >expected <<-EOF && |
a1549f9b RR |
452 | Submodule sm2 0000000...$head7 (new submodule) |
453 | EOF | |
f8d186bb | 454 | test_cmp expected actual |
a1549f9b | 455 | ' |
86140d56 JL |
456 | |
457 | commit_file sm2 | |
a1549f9b | 458 | test_expect_success 'given commit' ' |
86140d56 | 459 | git diff-index -p --submodule=log HEAD^ >actual && |
f8d186bb | 460 | cat >expected <<-EOF && |
a1549f9b RR |
461 | Submodule sm1 $head6...0000000 (submodule deleted) |
462 | Submodule sm2 0000000...$head7 (new submodule) | |
463 | EOF | |
f8d186bb | 464 | test_cmp expected actual |
a1549f9b | 465 | ' |
86140d56 | 466 | |
a1549f9b | 467 | test_expect_success 'given commit --submodule' ' |
86140d56 | 468 | git diff-index -p --submodule HEAD^ >actual && |
f8d186bb | 469 | cat >expected <<-EOF && |
a1549f9b RR |
470 | Submodule sm1 $head6...0000000 (submodule deleted) |
471 | Submodule sm2 0000000...$head7 (new submodule) | |
472 | EOF | |
f8d186bb | 473 | test_cmp expected actual |
a1549f9b | 474 | ' |
86140d56 | 475 | |
20fa5385 | 476 | fullhead7=$(cd sm2; git rev-parse --verify HEAD) |
86140d56 | 477 | |
a1549f9b | 478 | test_expect_success 'given commit --submodule=short' ' |
86140d56 | 479 | git diff-index -p --submodule=short HEAD^ >actual && |
f8d186bb | 480 | cat >expected <<-EOF && |
a1549f9b RR |
481 | diff --git a/sm1 b/sm1 |
482 | deleted file mode 160000 | |
483 | index $head6..0000000 | |
484 | --- a/sm1 | |
485 | +++ /dev/null | |
486 | @@ -1 +0,0 @@ | |
487 | -Subproject commit $fullhead6 | |
488 | diff --git a/sm2 b/sm2 | |
489 | new file mode 160000 | |
490 | index 0000000..$head7 | |
491 | --- /dev/null | |
492 | +++ b/sm2 | |
493 | @@ -0,0 +1 @@ | |
494 | +Subproject commit $fullhead7 | |
495 | EOF | |
496 | test_cmp expected actual | |
497 | ' | |
86140d56 | 498 | |
eee49b6c JL |
499 | test_expect_success 'setup .git file for sm2' ' |
500 | (cd sm2 && | |
501 | REAL="$(pwd)/../.real" && | |
f957f03b | 502 | mv .git "$REAL" && |
eee49b6c JL |
503 | echo "gitdir: $REAL" >.git) |
504 | ' | |
505 | ||
506 | test_expect_success 'diff --submodule with .git file' ' | |
507 | git diff --submodule HEAD^ >actual && | |
f8d186bb | 508 | cat >expected <<-EOF && |
a1549f9b RR |
509 | Submodule sm1 $head6...0000000 (submodule deleted) |
510 | Submodule sm2 0000000...$head7 (new submodule) | |
511 | EOF | |
f8d186bb | 512 | test_cmp expected actual |
eee49b6c JL |
513 | ' |
514 | ||
5e73633d HV |
515 | test_expect_success 'diff --submodule with objects referenced by alternates' ' |
516 | mkdir sub_alt && | |
517 | (cd sub_alt && | |
518 | git init && | |
519 | echo a >a && | |
520 | git add a && | |
521 | git commit -m a | |
522 | ) && | |
523 | mkdir super && | |
524 | (cd super && | |
525 | git clone -s ../sub_alt sub && | |
526 | git init && | |
527 | git add sub && | |
528 | git commit -m "sub a" | |
529 | ) && | |
530 | (cd sub_alt && | |
f957f03b | 531 | sha1_before=$(git rev-parse --short HEAD) && |
5e73633d HV |
532 | echo b >b && |
533 | git add b && | |
99094a7a JK |
534 | git commit -m b && |
535 | sha1_after=$(git rev-parse --short HEAD) && | |
536 | { | |
537 | echo "Submodule sub $sha1_before..$sha1_after:" && | |
538 | echo " > b" | |
539 | } >../expected | |
5e73633d HV |
540 | ) && |
541 | (cd super && | |
542 | (cd sub && | |
543 | git fetch && | |
8f37854b | 544 | git checkout origin/main |
5e73633d HV |
545 | ) && |
546 | git diff --submodule > ../actual | |
60687de5 | 547 | ) && |
5e73633d HV |
548 | test_cmp expected actual |
549 | ' | |
550 | ||
86140d56 | 551 | test_done |