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 8test_description='Support for diff format verbose submodule difference in git diff 9 10This 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 16test_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. 20added=$(printf "hinzugef\303\274gt") 21 22add_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 40commit_file () { 41 test_tick && 42 git commit "$@" -m "Commit $*" >/dev/null 43} 44 45diff_cmp () { 46 for i in "$1" "$2" 47 do 48 sed -e 's/^index 0000000\.\.[0-9a-f]*/index 0000000..1234567/' \ 49 -e 's/^index [0-9a-f]*\.\.[0-9a-f]*/index 1234567..89abcde/' \ 50 "$i" >"$i.compare" || return 1 51 done && 52 test_cmp "$1.compare" "$2.compare" && 53 rm -f "$1.compare" "$2.compare" 54} 55 56test_expect_success 'setup repository' ' 57 test_create_repo sm1 && 58 add_file . foo && 59 head1=$(add_file sm1 foo1 foo2) && 60 fullhead1=$(git -C sm1 rev-parse --verify HEAD) 61' 62 63test_expect_success 'added submodule' ' 64 git add sm1 && 65 git diff-index -p --submodule=diff HEAD >actual && 66 cat >expected <<-EOF && 67 Submodule sm1 0000000...$head1 (new submodule) 68 diff --git a/sm1/foo1 b/sm1/foo1 69 new file mode 100644 70 index 0000000..1715acd 71 --- /dev/null 72 +++ b/sm1/foo1 73 @@ -0,0 +1 @@ 74 +foo1 75 diff --git a/sm1/foo2 b/sm1/foo2 76 new file mode 100644 77 index 0000000..54b060e 78 --- /dev/null 79 +++ b/sm1/foo2 80 @@ -0,0 +1 @@ 81 +foo2 82 EOF 83 diff_cmp expected actual 84' 85 86test_expect_success 'added submodule, set diff.submodule' ' 87 test_config diff.submodule log && 88 git add sm1 && 89 git diff-index -p --submodule=diff HEAD >actual && 90 cat >expected <<-EOF && 91 Submodule sm1 0000000...$head1 (new submodule) 92 diff --git a/sm1/foo1 b/sm1/foo1 93 new file mode 100644 94 index 0000000..1715acd 95 --- /dev/null 96 +++ b/sm1/foo1 97 @@ -0,0 +1 @@ 98 +foo1 99 diff --git a/sm1/foo2 b/sm1/foo2 100 new file mode 100644 101 index 0000000..54b060e 102 --- /dev/null 103 +++ b/sm1/foo2 104 @@ -0,0 +1 @@ 105 +foo2 106 EOF 107 diff_cmp expected actual 108' 109 110test_expect_success '--submodule=short overrides diff.submodule' ' 111 test_config diff.submodule log && 112 git add sm1 && 113 git diff --submodule=short --cached >actual && 114 cat >expected <<-EOF && 115 diff --git a/sm1 b/sm1 116 new file mode 160000 117 index 0000000..$head1 118 --- /dev/null 119 +++ b/sm1 120 @@ -0,0 +1 @@ 121 +Subproject commit $fullhead1 122 EOF 123 diff_cmp expected actual 124' 125 126test_expect_success 'diff.submodule does not affect plumbing' ' 127 test_config diff.submodule log && 128 git diff-index -p HEAD >actual && 129 cat >expected <<-EOF && 130 diff --git a/sm1 b/sm1 131 new file mode 160000 132 index 0000000..$head1 133 --- /dev/null 134 +++ b/sm1 135 @@ -0,0 +1 @@ 136 +Subproject commit $fullhead1 137 EOF 138 diff_cmp expected actual 139' 140 141commit_file sm1 && 142head2=$(add_file sm1 foo3) 143 144test_expect_success 'modified submodule(forward)' ' 145 git diff-index -p --submodule=diff HEAD >actual && 146 cat >expected <<-EOF && 147 Submodule sm1 $head1..$head2: 148 diff --git a/sm1/foo3 b/sm1/foo3 149 new file mode 100644 150 index 0000000..c1ec6c6 151 --- /dev/null 152 +++ b/sm1/foo3 153 @@ -0,0 +1 @@ 154 +foo3 155 EOF 156 diff_cmp expected actual 157' 158 159test_expect_success 'modified submodule(forward)' ' 160 git diff --submodule=diff >actual && 161 cat >expected <<-EOF && 162 Submodule sm1 $head1..$head2: 163 diff --git a/sm1/foo3 b/sm1/foo3 164 new file mode 100644 165 index 0000000..c1ec6c6 166 --- /dev/null 167 +++ b/sm1/foo3 168 @@ -0,0 +1 @@ 169 +foo3 170 EOF 171 diff_cmp expected actual 172' 173 174test_expect_success 'modified submodule(forward) --submodule' ' 175 git diff --submodule >actual && 176 cat >expected <<-EOF && 177 Submodule sm1 $head1..$head2: 178 > Add foo3 ($added foo3) 179 EOF 180 diff_cmp expected actual 181' 182 183fullhead2=$(cd sm1; git rev-parse --verify HEAD) 184test_expect_success 'modified submodule(forward) --submodule=short' ' 185 git diff --submodule=short >actual && 186 cat >expected <<-EOF && 187 diff --git a/sm1 b/sm1 188 index $head1..$head2 160000 189 --- a/sm1 190 +++ b/sm1 191 @@ -1 +1 @@ 192 -Subproject commit $fullhead1 193 +Subproject commit $fullhead2 194 EOF 195 diff_cmp expected actual 196' 197 198commit_file sm1 && 199head3=$( 200 cd sm1 && 201 git reset --hard HEAD~2 >/dev/null && 202 git rev-parse --short --verify HEAD 203) 204 205test_expect_success 'modified submodule(backward)' ' 206 git diff-index -p --submodule=diff HEAD >actual && 207 cat >expected <<-EOF && 208 Submodule sm1 $head2..$head3 (rewind): 209 diff --git a/sm1/foo2 b/sm1/foo2 210 deleted file mode 100644 211 index 54b060e..0000000 212 --- a/sm1/foo2 213 +++ /dev/null 214 @@ -1 +0,0 @@ 215 -foo2 216 diff --git a/sm1/foo3 b/sm1/foo3 217 deleted file mode 100644 218 index c1ec6c6..0000000 219 --- a/sm1/foo3 220 +++ /dev/null 221 @@ -1 +0,0 @@ 222 -foo3 223 EOF 224 diff_cmp expected actual 225' 226 227head4=$(add_file sm1 foo4 foo5) 228test_expect_success 'modified submodule(backward and forward)' ' 229 git diff-index -p --submodule=diff HEAD >actual && 230 cat >expected <<-EOF && 231 Submodule sm1 $head2...$head4: 232 diff --git a/sm1/foo2 b/sm1/foo2 233 deleted file mode 100644 234 index 54b060e..0000000 235 --- a/sm1/foo2 236 +++ /dev/null 237 @@ -1 +0,0 @@ 238 -foo2 239 diff --git a/sm1/foo3 b/sm1/foo3 240 deleted file mode 100644 241 index c1ec6c6..0000000 242 --- a/sm1/foo3 243 +++ /dev/null 244 @@ -1 +0,0 @@ 245 -foo3 246 diff --git a/sm1/foo4 b/sm1/foo4 247 new file mode 100644 248 index 0000000..a0016db 249 --- /dev/null 250 +++ b/sm1/foo4 251 @@ -0,0 +1 @@ 252 +foo4 253 diff --git a/sm1/foo5 b/sm1/foo5 254 new file mode 100644 255 index 0000000..d6f2413 256 --- /dev/null 257 +++ b/sm1/foo5 258 @@ -0,0 +1 @@ 259 +foo5 260 EOF 261 diff_cmp expected actual 262' 263 264commit_file sm1 && 265mv sm1 sm1-bak && 266echo sm1 >sm1 && 267head5=$(git hash-object sm1 | cut -c1-7) && 268git add sm1 && 269rm -f sm1 && 270mv sm1-bak sm1 271 272test_expect_success 'typechanged submodule(submodule->blob), --cached' ' 273 git diff --submodule=diff --cached >actual && 274 cat >expected <<-EOF && 275 Submodule sm1 $head4...0000000 (submodule deleted) 276 diff --git a/sm1/foo1 b/sm1/foo1 277 deleted file mode 100644 278 index 1715acd..0000000 279 --- a/sm1/foo1 280 +++ /dev/null 281 @@ -1 +0,0 @@ 282 -foo1 283 diff --git a/sm1/foo4 b/sm1/foo4 284 deleted file mode 100644 285 index a0016db..0000000 286 --- a/sm1/foo4 287 +++ /dev/null 288 @@ -1 +0,0 @@ 289 -foo4 290 diff --git a/sm1/foo5 b/sm1/foo5 291 deleted file mode 100644 292 index d6f2413..0000000 293 --- a/sm1/foo5 294 +++ /dev/null 295 @@ -1 +0,0 @@ 296 -foo5 297 diff --git a/sm1 b/sm1 298 new file mode 100644 299 index 0000000..9da5fb8 300 --- /dev/null 301 +++ b/sm1 302 @@ -0,0 +1 @@ 303 +sm1 304 EOF 305 diff_cmp expected actual 306' 307 308test_expect_success 'typechanged submodule(submodule->blob)' ' 309 git diff --submodule=diff >actual && 310 cat >expected <<-EOF && 311 diff --git a/sm1 b/sm1 312 deleted file mode 100644 313 index 9da5fb8..0000000 314 --- a/sm1 315 +++ /dev/null 316 @@ -1 +0,0 @@ 317 -sm1 318 Submodule sm1 0000000...$head4 (new submodule) 319 diff --git a/sm1/foo1 b/sm1/foo1 320 new file mode 100644 321 index 0000000..1715acd 322 --- /dev/null 323 +++ b/sm1/foo1 324 @@ -0,0 +1 @@ 325 +foo1 326 diff --git a/sm1/foo4 b/sm1/foo4 327 new file mode 100644 328 index 0000000..a0016db 329 --- /dev/null 330 +++ b/sm1/foo4 331 @@ -0,0 +1 @@ 332 +foo4 333 diff --git a/sm1/foo5 b/sm1/foo5 334 new file mode 100644 335 index 0000000..d6f2413 336 --- /dev/null 337 +++ b/sm1/foo5 338 @@ -0,0 +1 @@ 339 +foo5 340 EOF 341 diff_cmp expected actual 342' 343 344rm -rf sm1 && 345git checkout-index sm1 346test_expect_success 'typechanged submodule(submodule->blob)' ' 347 git diff-index -p --submodule=diff HEAD >actual && 348 cat >expected <<-EOF && 349 Submodule sm1 $head4...0000000 (submodule deleted) 350 diff --git a/sm1 b/sm1 351 new file mode 100644 352 index 0000000..9da5fb8 353 --- /dev/null 354 +++ b/sm1 355 @@ -0,0 +1 @@ 356 +sm1 357 EOF 358 diff_cmp expected actual 359' 360 361rm -f sm1 && 362test_create_repo sm1 && 363head6=$(add_file sm1 foo6 foo7) 364test_expect_success 'nonexistent commit' ' 365 git diff-index -p --submodule=diff HEAD >actual && 366 cat >expected <<-EOF && 367 Submodule sm1 $head4...$head6 (commits not present) 368 EOF 369 diff_cmp expected actual 370' 371 372commit_file 373test_expect_success 'typechanged submodule(blob->submodule)' ' 374 git diff-index -p --submodule=diff HEAD >actual && 375 cat >expected <<-EOF && 376 diff --git a/sm1 b/sm1 377 deleted file mode 100644 378 index 9da5fb8..0000000 379 --- a/sm1 380 +++ /dev/null 381 @@ -1 +0,0 @@ 382 -sm1 383 Submodule sm1 0000000...$head6 (new submodule) 384 diff --git a/sm1/foo6 b/sm1/foo6 385 new file mode 100644 386 index 0000000..462398b 387 --- /dev/null 388 +++ b/sm1/foo6 389 @@ -0,0 +1 @@ 390 +foo6 391 diff --git a/sm1/foo7 b/sm1/foo7 392 new file mode 100644 393 index 0000000..6e9262c 394 --- /dev/null 395 +++ b/sm1/foo7 396 @@ -0,0 +1 @@ 397 +foo7 398 EOF 399 diff_cmp expected actual 400' 401 402commit_file sm1 && 403test_expect_success 'submodule is up to date' ' 404 head7=$(git -C sm1 rev-parse --short --verify HEAD) && 405 git diff-index -p --submodule=diff HEAD >actual && 406 test_must_be_empty actual 407' 408 409test_expect_success 'submodule contains untracked content' ' 410 echo new > sm1/new-file && 411 git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual && 412 cat >expected <<-EOF && 413 Submodule sm1 contains untracked content 414 EOF 415 diff_cmp expected actual 416' 417 418test_expect_success 'submodule contains untracked content (untracked ignored)' ' 419 git diff-index -p --submodule=diff HEAD >actual && 420 test_must_be_empty actual 421' 422 423test_expect_success 'submodule contains untracked content (dirty ignored)' ' 424 git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && 425 test_must_be_empty actual 426' 427 428test_expect_success 'submodule contains untracked content (all ignored)' ' 429 git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual && 430 test_must_be_empty actual 431' 432 433test_expect_success 'submodule contains untracked and modified content' ' 434 echo new > sm1/foo6 && 435 git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual && 436 cat >expected <<-EOF && 437 Submodule sm1 contains untracked content 438 Submodule sm1 contains modified content 439 diff --git a/sm1/foo6 b/sm1/foo6 440 index 462398b..3e75765 100644 441 --- a/sm1/foo6 442 +++ b/sm1/foo6 443 @@ -1 +1 @@ 444 -foo6 445 +new 446 EOF 447 diff_cmp expected actual 448' 449 450# NOT OK 451test_expect_success 'submodule contains untracked and modified content (untracked ignored)' ' 452 echo new > sm1/foo6 && 453 git diff-index -p --submodule=diff HEAD >actual && 454 cat >expected <<-EOF && 455 Submodule sm1 contains modified content 456 diff --git a/sm1/foo6 b/sm1/foo6 457 index 462398b..3e75765 100644 458 --- a/sm1/foo6 459 +++ b/sm1/foo6 460 @@ -1 +1 @@ 461 -foo6 462 +new 463 EOF 464 diff_cmp expected actual 465' 466 467test_expect_success 'submodule contains untracked and modified content (dirty ignored)' ' 468 echo new > sm1/foo6 && 469 git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && 470 test_must_be_empty actual 471' 472 473test_expect_success 'submodule contains untracked and modified content (all ignored)' ' 474 echo new > sm1/foo6 && 475 git diff-index -p --ignore-submodules --submodule=diff HEAD >actual && 476 test_must_be_empty actual 477' 478 479test_expect_success 'submodule contains modified content' ' 480 rm -f sm1/new-file && 481 git diff-index -p --submodule=diff HEAD >actual && 482 cat >expected <<-EOF && 483 Submodule sm1 contains modified content 484 diff --git a/sm1/foo6 b/sm1/foo6 485 index 462398b..3e75765 100644 486 --- a/sm1/foo6 487 +++ b/sm1/foo6 488 @@ -1 +1 @@ 489 -foo6 490 +new 491 EOF 492 diff_cmp expected actual 493' 494 495(cd sm1; git commit -mchange foo6 >/dev/null) && 496head8=$(cd sm1; git rev-parse --short --verify HEAD) && 497test_expect_success 'submodule is modified' ' 498 git diff-index -p --submodule=diff HEAD >actual && 499 cat >expected <<-EOF && 500 Submodule sm1 $head7..$head8: 501 diff --git a/sm1/foo6 b/sm1/foo6 502 index 462398b..3e75765 100644 503 --- a/sm1/foo6 504 +++ b/sm1/foo6 505 @@ -1 +1 @@ 506 -foo6 507 +new 508 EOF 509 diff_cmp expected actual 510' 511 512test_expect_success 'modified submodule contains untracked content' ' 513 echo new > sm1/new-file && 514 git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual && 515 cat >expected <<-EOF && 516 Submodule sm1 contains untracked content 517 Submodule sm1 $head7..$head8: 518 diff --git a/sm1/foo6 b/sm1/foo6 519 index 462398b..3e75765 100644 520 --- a/sm1/foo6 521 +++ b/sm1/foo6 522 @@ -1 +1 @@ 523 -foo6 524 +new 525 EOF 526 diff_cmp expected actual 527' 528 529test_expect_success 'modified submodule contains untracked content (untracked ignored)' ' 530 git diff-index -p --submodule=diff HEAD >actual && 531 cat >expected <<-EOF && 532 Submodule sm1 $head7..$head8: 533 diff --git a/sm1/foo6 b/sm1/foo6 534 index 462398b..3e75765 100644 535 --- a/sm1/foo6 536 +++ b/sm1/foo6 537 @@ -1 +1 @@ 538 -foo6 539 +new 540 EOF 541 diff_cmp expected actual 542' 543 544test_expect_success 'modified submodule contains untracked content (dirty ignored)' ' 545 git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && 546 cat >expected <<-EOF && 547 Submodule sm1 $head7..$head8: 548 diff --git a/sm1/foo6 b/sm1/foo6 549 index 462398b..3e75765 100644 550 --- a/sm1/foo6 551 +++ b/sm1/foo6 552 @@ -1 +1 @@ 553 -foo6 554 +new 555 EOF 556 diff_cmp expected actual 557' 558 559test_expect_success 'modified submodule contains untracked content (all ignored)' ' 560 git diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual && 561 test_must_be_empty actual 562' 563 564test_expect_success 'modified submodule contains untracked and modified content' ' 565 echo modification >> sm1/foo6 && 566 git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual && 567 cat >expected <<-EOF && 568 Submodule sm1 contains untracked content 569 Submodule sm1 contains modified content 570 Submodule sm1 $head7..$head8: 571 diff --git a/sm1/foo6 b/sm1/foo6 572 index 462398b..dfda541 100644 573 --- a/sm1/foo6 574 +++ b/sm1/foo6 575 @@ -1 +1,2 @@ 576 -foo6 577 +new 578 +modification 579 EOF 580 diff_cmp expected actual 581' 582 583test_expect_success 'modified submodule contains untracked and modified content (untracked ignored)' ' 584 echo modification >> sm1/foo6 && 585 git diff-index -p --submodule=diff HEAD >actual && 586 cat >expected <<-EOF && 587 Submodule sm1 contains modified content 588 Submodule sm1 $head7..$head8: 589 diff --git a/sm1/foo6 b/sm1/foo6 590 index 462398b..e20e2d9 100644 591 --- a/sm1/foo6 592 +++ b/sm1/foo6 593 @@ -1 +1,3 @@ 594 -foo6 595 +new 596 +modification 597 +modification 598 EOF 599 diff_cmp expected actual 600' 601 602test_expect_success 'modified submodule contains untracked and modified content (dirty ignored)' ' 603 echo modification >> sm1/foo6 && 604 git diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual && 605 cat >expected <<-EOF && 606 Submodule sm1 $head7..$head8: 607 diff --git a/sm1/foo6 b/sm1/foo6 608 index 462398b..3e75765 100644 609 --- a/sm1/foo6 610 +++ b/sm1/foo6 611 @@ -1 +1 @@ 612 -foo6 613 +new 614 EOF 615 diff_cmp expected actual 616' 617 618test_expect_success 'modified submodule contains untracked and modified content (all ignored)' ' 619 echo modification >> sm1/foo6 && 620 git diff-index -p --ignore-submodules --submodule=diff HEAD >actual && 621 test_must_be_empty actual 622' 623 624# NOT OK 625test_expect_success 'modified submodule contains modified content' ' 626 rm -f sm1/new-file && 627 git diff-index -p --submodule=diff HEAD >actual && 628 cat >expected <<-EOF && 629 Submodule sm1 contains modified content 630 Submodule sm1 $head7..$head8: 631 diff --git a/sm1/foo6 b/sm1/foo6 632 index 462398b..ac466ca 100644 633 --- a/sm1/foo6 634 +++ b/sm1/foo6 635 @@ -1 +1,5 @@ 636 -foo6 637 +new 638 +modification 639 +modification 640 +modification 641 +modification 642 EOF 643 diff_cmp expected actual 644' 645 646rm -rf sm1 647test_expect_success 'deleted submodule' ' 648 git diff-index -p --submodule=diff HEAD >actual && 649 cat >expected <<-EOF && 650 Submodule sm1 $head7...0000000 (submodule deleted) 651 EOF 652 diff_cmp expected actual 653' 654 655test_expect_success 'create second submodule' ' 656 test_create_repo sm2 && 657 head9=$(add_file sm2 foo8 foo9) && 658 git add sm2 659' 660 661test_expect_success 'multiple submodules' ' 662 git diff-index -p --submodule=diff HEAD >actual && 663 cat >expected <<-EOF && 664 Submodule sm1 $head7...0000000 (submodule deleted) 665 Submodule sm2 0000000...$head9 (new submodule) 666 diff --git a/sm2/foo8 b/sm2/foo8 667 new file mode 100644 668 index 0000000..db9916b 669 --- /dev/null 670 +++ b/sm2/foo8 671 @@ -0,0 +1 @@ 672 +foo8 673 diff --git a/sm2/foo9 b/sm2/foo9 674 new file mode 100644 675 index 0000000..9c3b4f6 676 --- /dev/null 677 +++ b/sm2/foo9 678 @@ -0,0 +1 @@ 679 +foo9 680 EOF 681 diff_cmp expected actual 682' 683 684test_expect_success 'path filter' ' 685 git diff-index -p --submodule=diff HEAD sm2 >actual && 686 cat >expected <<-EOF && 687 Submodule sm2 0000000...$head9 (new submodule) 688 diff --git a/sm2/foo8 b/sm2/foo8 689 new file mode 100644 690 index 0000000..db9916b 691 --- /dev/null 692 +++ b/sm2/foo8 693 @@ -0,0 +1 @@ 694 +foo8 695 diff --git a/sm2/foo9 b/sm2/foo9 696 new file mode 100644 697 index 0000000..9c3b4f6 698 --- /dev/null 699 +++ b/sm2/foo9 700 @@ -0,0 +1 @@ 701 +foo9 702 EOF 703 diff_cmp expected actual 704' 705 706cat >.gitmodules <<-EOF 707[submodule "sm2"] 708 path = sm2 709 url = bogus_url 710EOF 711git add .gitmodules 712commit_file sm2 .gitmodules 713 714test_expect_success 'given commit' ' 715 git diff-index -p --submodule=diff HEAD^ >actual && 716 cat >expected <<-EOF && 717 diff --git a/.gitmodules b/.gitmodules 718 new file mode 100644 719 index 1234567..89abcde 720 --- /dev/null 721 +++ b/.gitmodules 722 @@ -0,0 +1,3 @@ 723 +[submodule "sm2"] 724 +path = sm2 725 +url = bogus_url 726 Submodule sm1 $head7...0000000 (submodule deleted) 727 Submodule sm2 0000000...$head9 (new submodule) 728 diff --git a/sm2/foo8 b/sm2/foo8 729 new file mode 100644 730 index 0000000..db9916b 731 --- /dev/null 732 +++ b/sm2/foo8 733 @@ -0,0 +1 @@ 734 +foo8 735 diff --git a/sm2/foo9 b/sm2/foo9 736 new file mode 100644 737 index 0000000..9c3b4f6 738 --- /dev/null 739 +++ b/sm2/foo9 740 @@ -0,0 +1 @@ 741 +foo9 742 EOF 743 diff_cmp expected actual 744' 745 746test_expect_success 'setup .git file for sm2' ' 747 git submodule absorbgitdirs sm2 748' 749 750test_expect_success 'diff --submodule=diff with .git file' ' 751 git diff --submodule=diff HEAD^ >actual && 752 cat >expected <<-EOF && 753 diff --git a/.gitmodules b/.gitmodules 754 new file mode 100644 755 index 1234567..89abcde 756 --- /dev/null 757 +++ b/.gitmodules 758 @@ -0,0 +1,3 @@ 759 +[submodule "sm2"] 760 +path = sm2 761 +url = bogus_url 762 Submodule sm1 $head7...0000000 (submodule deleted) 763 Submodule sm2 0000000...$head9 (new submodule) 764 diff --git a/sm2/foo8 b/sm2/foo8 765 new file mode 100644 766 index 0000000..db9916b 767 --- /dev/null 768 +++ b/sm2/foo8 769 @@ -0,0 +1 @@ 770 +foo8 771 diff --git a/sm2/foo9 b/sm2/foo9 772 new file mode 100644 773 index 0000000..9c3b4f6 774 --- /dev/null 775 +++ b/sm2/foo9 776 @@ -0,0 +1 @@ 777 +foo9 778 EOF 779 diff_cmp expected actual 780' 781 782mv sm2 sm2-bak 783 784test_expect_success 'deleted submodule with .git file' ' 785 git diff-index -p --submodule=diff HEAD >actual && 786 cat >expected <<-EOF && 787 Submodule sm1 $head7...0000000 (submodule deleted) 788 Submodule sm2 $head9...0000000 (submodule deleted) 789 diff --git a/sm2/foo8 b/sm2/foo8 790 deleted file mode 100644 791 index 1234567..89abcde 792 --- a/sm2/foo8 793 +++ /dev/null 794 @@ -1 +0,0 @@ 795 -foo8 796 diff --git a/sm2/foo9 b/sm2/foo9 797 deleted file mode 100644 798 index 1234567..89abcde 799 --- a/sm2/foo9 800 +++ /dev/null 801 @@ -1 +0,0 @@ 802 -foo9 803 EOF 804 diff_cmp expected actual 805' 806 807echo submodule-to-blob>sm2 808 809test_expect_success 'typechanged(submodule->blob) submodule with .git file' ' 810 git diff-index -p --submodule=diff HEAD >actual && 811 cat >expected <<-EOF && 812 Submodule sm1 $head7...0000000 (submodule deleted) 813 Submodule sm2 $head9...0000000 (submodule deleted) 814 diff --git a/sm2/foo8 b/sm2/foo8 815 deleted file mode 100644 816 index 1234567..89abcde 817 --- a/sm2/foo8 818 +++ /dev/null 819 @@ -1 +0,0 @@ 820 -foo8 821 diff --git a/sm2/foo9 b/sm2/foo9 822 deleted file mode 100644 823 index 1234567..89abcde 824 --- a/sm2/foo9 825 +++ /dev/null 826 @@ -1 +0,0 @@ 827 -foo9 828 diff --git a/sm2 b/sm2 829 new file mode 100644 830 index 1234567..89abcde 831 --- /dev/null 832 +++ b/sm2 833 @@ -0,0 +1 @@ 834 +submodule-to-blob 835 EOF 836 diff_cmp expected actual 837' 838 839rm sm2 840mv sm2-bak sm2 841 842test_expect_success 'setup nested submodule' ' 843 git -C sm2 submodule add ../sm2 nested && 844 git -C sm2 commit -a -m "nested sub" && 845 head10=$(git -C sm2 rev-parse --short --verify HEAD) 846' 847 848test_expect_success 'move nested submodule HEAD' ' 849 echo "nested content" >sm2/nested/file && 850 git -C sm2/nested add file && 851 git -C sm2/nested commit --allow-empty -m "new HEAD" && 852 head11=$(git -C sm2/nested rev-parse --short --verify HEAD) 853' 854 855test_expect_success 'diff --submodule=diff with moved nested submodule HEAD' ' 856 cat >expected <<-EOF && 857 Submodule nested $head9..$head11: 858 diff --git a/nested/file b/nested/file 859 new file mode 100644 860 index 0000000..ca281f5 861 --- /dev/null 862 +++ b/nested/file 863 @@ -0,0 +1 @@ 864 +nested content 865 EOF 866 git -C sm2 diff --submodule=diff >actual 2>err && 867 test_must_be_empty err && 868 diff_cmp expected actual 869' 870 871test_expect_success 'diff --submodule=diff recurses into nested submodules' ' 872 cat >expected <<-EOF && 873 Submodule sm1 $head7...0000000 (submodule deleted) 874 Submodule sm2 contains modified content 875 Submodule sm2 $head9..$head10: 876 diff --git a/sm2/.gitmodules b/sm2/.gitmodules 877 new file mode 100644 878 index 0000000..3a816b8 879 --- /dev/null 880 +++ b/sm2/.gitmodules 881 @@ -0,0 +1,3 @@ 882 +[submodule "nested"] 883 + path = nested 884 + url = ../sm2 885 Submodule nested 0000000...$head11 (new submodule) 886 diff --git a/sm2/nested/file b/sm2/nested/file 887 new file mode 100644 888 index 0000000..ca281f5 889 --- /dev/null 890 +++ b/sm2/nested/file 891 @@ -0,0 +1 @@ 892 +nested content 893 diff --git a/sm2/nested/foo8 b/sm2/nested/foo8 894 new file mode 100644 895 index 0000000..db9916b 896 --- /dev/null 897 +++ b/sm2/nested/foo8 898 @@ -0,0 +1 @@ 899 +foo8 900 diff --git a/sm2/nested/foo9 b/sm2/nested/foo9 901 new file mode 100644 902 index 0000000..9c3b4f6 903 --- /dev/null 904 +++ b/sm2/nested/foo9 905 @@ -0,0 +1 @@ 906 +foo9 907 EOF 908 git diff --submodule=diff >actual 2>err && 909 test_must_be_empty err && 910 diff_cmp expected actual 911' 912 913(cd sm2; commit_file nested) 914commit_file sm2 915head12=$(cd sm2; git rev-parse --short --verify HEAD) 916 917mv sm2 sm2-bak 918 919test_expect_success 'diff --submodule=diff recurses into deleted nested submodules' ' 920 cat >expected <<-EOF && 921 Submodule sm1 $head7...0000000 (submodule deleted) 922 Submodule sm2 $head12...0000000 (submodule deleted) 923 diff --git a/sm2/.gitmodules b/sm2/.gitmodules 924 deleted file mode 100644 925 index 3a816b8..0000000 926 --- a/sm2/.gitmodules 927 +++ /dev/null 928 @@ -1,3 +0,0 @@ 929 -[submodule "nested"] 930 - path = nested 931 - url = ../sm2 932 diff --git a/sm2/foo8 b/sm2/foo8 933 deleted file mode 100644 934 index db9916b..0000000 935 --- a/sm2/foo8 936 +++ /dev/null 937 @@ -1 +0,0 @@ 938 -foo8 939 diff --git a/sm2/foo9 b/sm2/foo9 940 deleted file mode 100644 941 index 9c3b4f6..0000000 942 --- a/sm2/foo9 943 +++ /dev/null 944 @@ -1 +0,0 @@ 945 -foo9 946 Submodule nested $head11...0000000 (submodule deleted) 947 diff --git a/sm2/nested/file b/sm2/nested/file 948 deleted file mode 100644 949 index ca281f5..0000000 950 --- a/sm2/nested/file 951 +++ /dev/null 952 @@ -1 +0,0 @@ 953 -nested content 954 diff --git a/sm2/nested/foo8 b/sm2/nested/foo8 955 deleted file mode 100644 956 index db9916b..0000000 957 --- a/sm2/nested/foo8 958 +++ /dev/null 959 @@ -1 +0,0 @@ 960 -foo8 961 diff --git a/sm2/nested/foo9 b/sm2/nested/foo9 962 deleted file mode 100644 963 index 9c3b4f6..0000000 964 --- a/sm2/nested/foo9 965 +++ /dev/null 966 @@ -1 +0,0 @@ 967 -foo9 968 EOF 969 git diff --submodule=diff >actual 2>err && 970 test_must_be_empty err && 971 diff_cmp expected actual 972' 973 974mv sm2-bak sm2 975 976test_done 977