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