Merge branch 'ms/ls-remote-exit-with-status'
[gitweb.git] / t / t4027-diff-submodule.sh
index 1bd8e5ee3ac5ca4d101738048e6769ae798b23dc..518bf9524e0b55181f3c440d202b69c12a0b314f 100755 (executable)
@@ -5,7 +5,6 @@ test_description='difference in submodules'
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/diff-lib.sh
 
-_z40=0000000000000000000000000000000000000000
 test_expect_success setup '
        test_tick &&
        test_create_repo sub &&
@@ -114,6 +113,69 @@ test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)'
        ! test -s actual4
 '
 
+test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.git/config]' '
+       git config diff.ignoreSubmodules all &&
+       git diff HEAD >actual &&
+       ! test -s actual &&
+       git config submodule.subname.ignore none &&
+       git config submodule.subname.path sub &&
+       git diff HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual.body &&
+       git config submodule.subname.ignore all &&
+       git diff HEAD >actual2 &&
+       ! test -s actual2 &&
+       git config submodule.subname.ignore untracked &&
+       git diff HEAD >actual3 &&
+       sed -e "1,/^@@/d" actual3 >actual3.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual3.body &&
+       git config submodule.subname.ignore dirty &&
+       git diff HEAD >actual4 &&
+       ! test -s actual4 &&
+       git diff HEAD --ignore-submodules=none >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual.body &&
+       git config --remove-section submodule.subname &&
+       git config --unset diff.ignoreSubmodules
+'
+
+test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]' '
+       git config diff.ignoreSubmodules dirty &&
+       git diff HEAD >actual &&
+       ! test -s actual &&
+       git config --add -f .gitmodules submodule.subname.ignore none &&
+       git config --add -f .gitmodules submodule.subname.path sub &&
+       git diff HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual.body &&
+       git config -f .gitmodules submodule.subname.ignore all &&
+       git config -f .gitmodules submodule.subname.path sub &&
+       git diff HEAD >actual2 &&
+       ! test -s actual2 &&
+       git config -f .gitmodules submodule.subname.ignore untracked &&
+       git diff HEAD >actual3 &&
+       sed -e "1,/^@@/d" actual3 >actual3.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual3.body &&
+       git config -f .gitmodules submodule.subname.ignore dirty &&
+       git diff HEAD >actual4 &&
+       ! test -s actual4 &&
+       git config submodule.subname.ignore none &&
+       git config submodule.subname.path sub &&
+       git diff HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual.body &&
+       git config --remove-section submodule.subname &&
+       git config --remove-section -f .gitmodules submodule.subname &&
+       git config --unset diff.ignoreSubmodules &&
+       rm .gitmodules
+'
+
 test_expect_success 'git diff HEAD with dirty submodule (index, refs match)' '
        (
                cd sub &&
@@ -146,6 +208,103 @@ test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)'
        ! test -s actual4
 '
 
+test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.git/config]' '
+       git config submodule.subname.ignore all &&
+       git config submodule.subname.path sub &&
+       git diff HEAD >actual2 &&
+       ! test -s actual2 &&
+       git config submodule.subname.ignore untracked &&
+       git diff HEAD >actual3 &&
+       ! test -s actual3 &&
+       git config submodule.subname.ignore dirty &&
+       git diff HEAD >actual4 &&
+       ! test -s actual4 &&
+       git diff --ignore-submodules=none HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual.body &&
+       git config --remove-section submodule.subname
+'
+
+test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]' '
+       git config --add -f .gitmodules submodule.subname.ignore all &&
+       git config --add -f .gitmodules submodule.subname.path sub &&
+       git diff HEAD >actual2 &&
+       ! test -s actual2 &&
+       git config -f .gitmodules submodule.subname.ignore untracked &&
+       git diff HEAD >actual3 &&
+       ! test -s actual3 &&
+       git config -f .gitmodules submodule.subname.ignore dirty &&
+       git diff HEAD >actual4 &&
+       ! test -s actual4 &&
+       git config submodule.subname.ignore none &&
+       git config submodule.subname.path sub &&
+       git diff HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subprev $subprev-dirty &&
+       test_cmp expect.body actual.body &&
+       git config --remove-section submodule.subname &&
+       git config --remove-section -f .gitmodules submodule.subname &&
+       rm .gitmodules
+'
+
+test_expect_success 'git diff between submodule commits' '
+       git diff HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       test_cmp expect.body actual.body &&
+       git diff --ignore-submodules=dirty HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       test_cmp expect.body actual.body &&
+       git diff --ignore-submodules HEAD^..HEAD >actual &&
+       ! test -s actual
+'
+
+test_expect_success 'git diff between submodule commits [.git/config]' '
+       git diff HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       test_cmp expect.body actual.body &&
+       git config submodule.subname.ignore dirty &&
+       git config submodule.subname.path sub &&
+       git diff HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       test_cmp expect.body actual.body &&
+       git config submodule.subname.ignore all &&
+       git diff HEAD^..HEAD >actual &&
+       ! test -s actual &&
+       git diff --ignore-submodules=dirty HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       git config --remove-section submodule.subname
+'
+
+test_expect_success 'git diff between submodule commits [.gitmodules]' '
+       git diff HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       test_cmp expect.body actual.body &&
+       git config --add -f .gitmodules submodule.subname.ignore dirty &&
+       git config --add -f .gitmodules submodule.subname.path sub &&
+       git diff HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       test_cmp expect.body actual.body &&
+       git config -f .gitmodules submodule.subname.ignore all &&
+       git diff HEAD^..HEAD >actual &&
+       ! test -s actual &&
+       git config submodule.subname.ignore dirty &&
+       git config submodule.subname.path sub &&
+       git diff  HEAD^..HEAD >actual &&
+       sed -e "1,/^@@/d" actual >actual.body &&
+       expect_from_to >expect.body $subtip $subprev &&
+       git config --remove-section submodule.subname &&
+       git config --remove-section -f .gitmodules submodule.subname &&
+       rm .gitmodules
+'
+
 test_expect_success 'git diff (empty submodule dir)' '
        : >empty &&
        rm -rf sub/* sub/.git &&
@@ -156,11 +315,11 @@ test_expect_success 'git diff (empty submodule dir)' '
 test_expect_success 'conflicted submodule setup' '
 
        # 39 efs
-       c=fffffffffffffffffffffffffffffffffffffff
+       c=fffffffffffffffffffffffffffffffffffffff &&
        (
-               echo "000000 $_z40 0    sub"
-               echo "160000 1$c 1      sub"
-               echo "160000 2$c 2      sub"
+               echo "000000 $_z40 0    sub" &&
+               echo "160000 1$c 1      sub" &&
+               echo "160000 2$c 2      sub" &&
                echo "160000 3$c 3      sub"
        ) | git update-index --index-info &&
        echo >expect.nosub '\''diff --cc sub