#!/bin/sh global test_description := ''difference in submodules'' source ./test-lib.sh source "$TEST_DIRECTORY"/diff-lib.sh test_expect_success setup ' test_tick && test_create_repo sub && ( cd sub && echo hello >world && git add world && git commit -m submodule ) && test_tick && echo frotz >nitfol && git add nitfol sub && git commit -m superproject && ( cd sub && echo goodbye >world && git add world && git commit -m "submodule #2" ) && set x $( cd sub && git rev-list HEAD ) && echo ":160000 160000 $3 $_z40 M sub" >expect && subtip=$3 subprev=$2 ' test_expect_success 'git diff --raw HEAD' ' git diff --raw --abbrev=40 HEAD >actual && test_cmp expect actual ' test_expect_success 'git diff-index --raw HEAD' ' git diff-index --raw HEAD >actual.index && test_cmp expect actual.index ' test_expect_success 'git diff-files --raw' ' git diff-files --raw >actual.files && test_cmp expect actual.files ' proc expect_from_to { printf "%sSubproject commit %s\n+Subproject commit %s\n" \ "-" $1 $2 } test_expect_success 'git diff HEAD' ' git diff HEAD >actual && sed -e "1,/^@@/d" actual >actual.body && expect_from_to >expect.body $subtip $subprev && test_cmp expect.body actual.body ' test_expect_success 'git diff HEAD with dirty submodule (work tree)' ' echo >>sub/world && git diff HEAD >actual && sed -e "1,/^@@/d" actual >actual.body && expect_from_to >expect.body $subtip $subprev-dirty && test_cmp expect.body actual.body ' test_expect_success 'git diff HEAD with dirty submodule (index)' ' ( cd sub && git reset --hard && echo >>world && git add world ) && git diff HEAD >actual && sed -e "1,/^@@/d" actual >actual.body && expect_from_to >expect.body $subtip $subprev-dirty && test_cmp expect.body actual.body ' test_expect_success 'git diff HEAD with dirty submodule (untracked)' ' ( cd sub && git reset --hard && git clean -qfdx && >cruft ) && git diff HEAD >actual && sed -e "1,/^@@/d" actual >actual.body && expect_from_to >expect.body $subtip $subprev-dirty && test_cmp expect.body actual.body ' test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)' ' git commit -m "x" sub && echo >>sub/world && 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 diff --ignore-submodules HEAD >actual2 && ! test -s actual2 && git diff --ignore-submodules=untracked HEAD >actual3 && sed -e "1,/^@@/d" actual3 >actual3.body && expect_from_to >expect.body $subprev $subprev-dirty && test_cmp expect.body actual3.body && git diff --ignore-submodules=dirty HEAD >actual4 && ! 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 && git reset --hard && echo >>world && git add world ) && 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 ' test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)' ' ( cd sub && git reset --hard && git clean -qfdx && >cruft ) && 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 diff --ignore-submodules=all HEAD >actual2 && ! test -s actual2 && git diff --ignore-submodules=untracked HEAD >actual3 && ! test -s actual3 && git diff --ignore-submodules=dirty HEAD >actual4 && ! 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 && git diff > actual.empty && test_cmp empty actual.empty ' test_expect_success 'conflicted submodule setup' ' # 39 efs c=fffffffffffffffffffffffffffffffffffffff && ( 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 index 2ffffff,3ffffff..0000000 --- a/sub +++ b/sub @@@ -1,1 -1,1 +1,1 @@@ - Subproject commit 2fffffffffffffffffffffffffffffffffffffff -Subproject commit 3fffffffffffffffffffffffffffffffffffffff ++Subproject commit 0000000000000000000000000000000000000000''''' && hh=$(git rev-parse HEAD) && sed -e "s/$_z40/$hh/" expect.nosub >expect.withsub ' test_expect_success 'combined (empty submodule)' ' rm -fr sub && mkdir sub && git diff >actual && test_cmp expect.nosub actual ' test_expect_success 'combined (with submodule)' ' rm -fr sub && git clone --no-checkout . sub && git diff >actual && test_cmp expect.withsub actual ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"difference in submodules">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/diff-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\ttest_tick &&\n"> <"\ttest_create_repo sub &&\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\techo hello >world &&\n"> <"\t\tgit add world &&\n"> <"\t\tgit commit -m submodule\n"> <"\t) &&\n"> <"\n"> <"\ttest_tick &&\n"> <"\techo frotz >nitfol &&\n"> <"\tgit add nitfol sub &&\n"> <"\tgit commit -m superproject &&\n"> <"\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\techo goodbye >world &&\n"> <"\t\tgit add world &&\n"> <"\t\tgit commit -m \"submodule #2\"\n"> <"\t) &&\n"> <"\n"> <"\tset x $(\n"> <"\t\tcd sub &&\n"> <"\t\tgit rev-list HEAD\n"> <"\t) &&\n"> <"\techo \":160000 160000 $3 $_z40 M\tsub\" >expect &&\n"> <"\tsubtip=$3 subprev=$2\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff --raw HEAD">)} {(SQ <"\n"> <"\tgit diff --raw --abbrev=40 HEAD >actual &&\n"> <"\ttest_cmp expect actual\n">)} ) (C {(test_expect_success)} {(SQ <"git diff-index --raw HEAD">)} { (SQ <"\n"> <"\tgit diff-index --raw HEAD >actual.index &&\n"> <"\ttest_cmp expect actual.index\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff-files --raw">)} { (SQ <"\n"> <"\tgit diff-files --raw >actual.files &&\n"> <"\ttest_cmp expect actual.files\n">) } ) (FuncDef name: expect_from_to body: (BraceGroup children: [ (C {(printf)} { (DQ ("%sSubproject commit %s") (EscapedLiteralPart token:) ("+Subproject commit %s") (EscapedLiteralPart token:) ) } {(DQ (-))} {(DQ ($ VSub_Number "$1"))} {(DQ ($ VSub_Number "$2"))} ) ] spids: [102] ) spids: [97 101] ) (C {(test_expect_success)} {(SQ <"git diff HEAD">)} { (SQ <"\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (work tree)">)} { (SQ <"\n"> <"\techo >>sub/world &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (index)">)} { (SQ <"\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\tgit reset --hard &&\n"> <"\t\techo >>world &&\n"> <"\t\tgit add world\n"> <"\t) &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (untracked)">)} { (SQ <"\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\tgit reset --hard &&\n"> <"\t\tgit clean -qfdx &&\n"> <"\t\t>cruft\n"> <"\t) &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (work tree, refs match)">)} { (SQ <"\n"> <"\tgit commit -m \"x\" sub &&\n"> <"\techo >>sub/world &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit diff --ignore-submodules HEAD >actual2 &&\n"> <"\t! test -s actual2 &&\n"> <"\tgit diff --ignore-submodules=untracked HEAD >actual3 &&\n"> <"\tsed -e \"1,/^@@/d\" actual3 >actual3.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual3.body &&\n"> <"\tgit diff --ignore-submodules=dirty HEAD >actual4 &&\n"> <"\t! test -s actual4\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (work tree, refs match) [.git/config]">)} { (SQ <"\n"> <"\tgit config diff.ignoreSubmodules all &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\t! test -s actual &&\n"> <"\tgit config submodule.subname.ignore none &&\n"> <"\tgit config submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config submodule.subname.ignore all &&\n"> <"\tgit diff HEAD >actual2 &&\n"> <"\t! test -s actual2 &&\n"> <"\tgit config submodule.subname.ignore untracked &&\n"> <"\tgit diff HEAD >actual3 &&\n"> <"\tsed -e \"1,/^@@/d\" actual3 >actual3.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual3.body &&\n"> <"\tgit config submodule.subname.ignore dirty &&\n"> <"\tgit diff HEAD >actual4 &&\n"> <"\t! test -s actual4 &&\n"> <"\tgit diff HEAD --ignore-submodules=none >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config --remove-section submodule.subname &&\n"> <"\tgit config --unset diff.ignoreSubmodules\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]">)} { (SQ <"\n"> <"\tgit config diff.ignoreSubmodules dirty &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\t! test -s actual &&\n"> <"\tgit config --add -f .gitmodules submodule.subname.ignore none &&\n"> <"\tgit config --add -f .gitmodules submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config -f .gitmodules submodule.subname.ignore all &&\n"> <"\tgit config -f .gitmodules submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual2 &&\n"> <"\t! test -s actual2 &&\n"> <"\tgit config -f .gitmodules submodule.subname.ignore untracked &&\n"> <"\tgit diff HEAD >actual3 &&\n"> <"\tsed -e \"1,/^@@/d\" actual3 >actual3.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual3.body &&\n"> <"\tgit config -f .gitmodules submodule.subname.ignore dirty &&\n"> <"\tgit diff HEAD >actual4 &&\n"> <"\t! test -s actual4 &&\n"> <"\tgit config submodule.subname.ignore none &&\n"> <"\tgit config submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config --remove-section submodule.subname &&\n"> <"\tgit config --remove-section -f .gitmodules submodule.subname &&\n"> <"\tgit config --unset diff.ignoreSubmodules &&\n"> <"\trm .gitmodules\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (index, refs match)">)} { (SQ <"\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\tgit reset --hard &&\n"> <"\t\techo >>world &&\n"> <"\t\tgit add world\n"> <"\t) &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (untracked, refs match)">)} { (SQ <"\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\tgit reset --hard &&\n"> <"\t\tgit clean -qfdx &&\n"> <"\t\t>cruft\n"> <"\t) &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit diff --ignore-submodules=all HEAD >actual2 &&\n"> <"\t! test -s actual2 &&\n"> <"\tgit diff --ignore-submodules=untracked HEAD >actual3 &&\n"> <"\t! test -s actual3 &&\n"> <"\tgit diff --ignore-submodules=dirty HEAD >actual4 &&\n"> <"\t! test -s actual4\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (untracked, refs match) [.git/config]">)} { (SQ <"\n"> <"\tgit config submodule.subname.ignore all &&\n"> <"\tgit config submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual2 &&\n"> <"\t! test -s actual2 &&\n"> <"\tgit config submodule.subname.ignore untracked &&\n"> <"\tgit diff HEAD >actual3 &&\n"> <"\t! test -s actual3 &&\n"> <"\tgit config submodule.subname.ignore dirty &&\n"> <"\tgit diff HEAD >actual4 &&\n"> <"\t! test -s actual4 &&\n"> <"\tgit diff --ignore-submodules=none HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config --remove-section submodule.subname\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]">)} { (SQ <"\n"> <"\tgit config --add -f .gitmodules submodule.subname.ignore all &&\n"> <"\tgit config --add -f .gitmodules submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual2 &&\n"> <"\t! test -s actual2 &&\n"> <"\tgit config -f .gitmodules submodule.subname.ignore untracked &&\n"> <"\tgit diff HEAD >actual3 &&\n"> <"\t! test -s actual3 &&\n"> <"\tgit config -f .gitmodules submodule.subname.ignore dirty &&\n"> <"\tgit diff HEAD >actual4 &&\n"> <"\t! test -s actual4 &&\n"> <"\tgit config submodule.subname.ignore none &&\n"> <"\tgit config submodule.subname.path sub &&\n"> <"\tgit diff HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subprev $subprev-dirty &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config --remove-section submodule.subname &&\n"> <"\tgit config --remove-section -f .gitmodules submodule.subname &&\n"> <"\trm .gitmodules\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff between submodule commits">)} { (SQ <"\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit diff --ignore-submodules=dirty HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit diff --ignore-submodules HEAD^..HEAD >actual &&\n"> <"\t! test -s actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff between submodule commits [.git/config]">)} { (SQ <"\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config submodule.subname.ignore dirty &&\n"> <"\tgit config submodule.subname.path sub &&\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config submodule.subname.ignore all &&\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\t! test -s actual &&\n"> <"\tgit diff --ignore-submodules=dirty HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\tgit config --remove-section submodule.subname\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff between submodule commits [.gitmodules]">)} { (SQ <"\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config --add -f .gitmodules submodule.subname.ignore dirty &&\n"> <"\tgit config --add -f .gitmodules submodule.subname.path sub &&\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\ttest_cmp expect.body actual.body &&\n"> <"\tgit config -f .gitmodules submodule.subname.ignore all &&\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\t! test -s actual &&\n"> <"\tgit config submodule.subname.ignore dirty &&\n"> <"\tgit config submodule.subname.path sub &&\n"> <"\tgit diff HEAD^..HEAD >actual &&\n"> <"\tsed -e \"1,/^@@/d\" actual >actual.body &&\n"> <"\texpect_from_to >expect.body $subtip $subprev &&\n"> <"\tgit config --remove-section submodule.subname &&\n"> <"\tgit config --remove-section -f .gitmodules submodule.subname &&\n"> <"\trm .gitmodules\n"> ) } ) (C {(test_expect_success)} {(SQ <"git diff (empty submodule dir)">)} { (SQ <"\n"> <"\t: >empty &&\n"> <"\trm -rf sub/* sub/.git &&\n"> <"\tgit diff > actual.empty &&\n"> <"\ttest_cmp empty actual.empty\n"> ) } ) (C {(test_expect_success)} {(SQ <"conflicted submodule setup">)} { (SQ <"\n"> <"\n"> <"\t# 39 efs\n"> <"\tc=fffffffffffffffffffffffffffffffffffffff &&\n"> <"\t(\n"> <"\t\techo \"000000 $_z40 0\tsub\" &&\n"> <"\t\techo \"160000 1$c 1\tsub\" &&\n"> <"\t\techo \"160000 2$c 2\tsub\" &&\n"> <"\t\techo \"160000 3$c 3\tsub\"\n"> <"\t) | git update-index --index-info &&\n"> <"\techo >expect.nosub "> ) (EscapedLiteralPart token:) (SQ <"diff --cc sub\n"> <"index 2ffffff,3ffffff..0000000\n"> <"--- a/sub\n"> <"+++ b/sub\n"> <"@@@ -1,1 -1,1 +1,1 @@@\n"> <"- Subproject commit 2fffffffffffffffffffffffffffffffffffffff\n"> <" -Subproject commit 3fffffffffffffffffffffffffffffffffffffff\n"> <"++Subproject commit 0000000000000000000000000000000000000000"> ) (EscapedLiteralPart token:) (SQ <" &&\n"> <"\n"> <"\thh=$(git rev-parse HEAD) &&\n"> <"\tsed -e \"s/$_z40/$hh/\" expect.nosub >expect.withsub\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"combined (empty submodule)">)} { (SQ <"\n"> <"\trm -fr sub && mkdir sub &&\n"> <"\tgit diff >actual &&\n"> <"\ttest_cmp expect.nosub actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"combined (with submodule)">)} { (SQ <"\n"> <"\trm -fr sub &&\n"> <"\tgit clone --no-checkout . sub &&\n"> <"\tgit diff >actual &&\n"> <"\ttest_cmp expect.withsub actual\n"> ) } ) (C {(test_done)}) ] )