3 test_description='difference in submodules'
6 . "$TEST_DIRECTORY"/diff-lib.sh
8 _z40=0000000000000000000000000000000000000000
9 test_expect_success setup '
11 test_create_repo sub &&
16 git commit -m submodule
22 git commit -m superproject &&
26 echo goodbye >world &&
28 git commit -m "submodule #2"
35 echo ":160000 160000 $3 $_z40 M sub" >expect &&
39 test_expect_success 'git diff --raw HEAD' '
40 git diff --raw --abbrev=40 HEAD >actual &&
41 test_cmp expect actual
44 test_expect_success 'git diff-index --raw HEAD' '
45 git diff-index --raw HEAD >actual.index &&
46 test_cmp expect actual.index
49 test_expect_success 'git diff-files --raw' '
50 git diff-files --raw >actual.files &&
51 test_cmp expect actual.files
55 printf "%sSubproject commit %s\n+Subproject commit %s\n" \
59 test_expect_success 'git diff HEAD' '
60 git diff HEAD >actual &&
61 sed -e "1,/^@@/d" actual >actual.body &&
62 expect_from_to >expect.body $subtip $subprev &&
63 test_cmp expect.body actual.body
66 test_expect_success 'git diff HEAD with dirty submodule (work tree)' '
68 git diff HEAD >actual &&
69 sed -e "1,/^@@/d" actual >actual.body &&
70 expect_from_to >expect.body $subtip $subprev-dirty &&
71 test_cmp expect.body actual.body
74 test_expect_success 'git diff HEAD with dirty submodule (index)' '
81 git diff HEAD >actual &&
82 sed -e "1,/^@@/d" actual >actual.body &&
83 expect_from_to >expect.body $subtip $subprev-dirty &&
84 test_cmp expect.body actual.body
87 test_expect_success 'git diff HEAD with dirty submodule (untracked)' '
94 git diff HEAD >actual &&
95 sed -e "1,/^@@/d" actual >actual.body &&
96 expect_from_to >expect.body $subtip $subprev-dirty &&
97 test_cmp expect.body actual.body
100 test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)' '
101 git commit -m "x" sub &&
103 git diff HEAD >actual &&
104 sed -e "1,/^@@/d" actual >actual.body &&
105 expect_from_to >expect.body $subprev $subprev-dirty &&
106 test_cmp expect.body actual.body &&
107 git diff --ignore-submodules HEAD >actual2 &&
109 git diff --ignore-submodules=untracked HEAD >actual3 &&
110 sed -e "1,/^@@/d" actual3 >actual3.body &&
111 expect_from_to >expect.body $subprev $subprev-dirty &&
112 test_cmp expect.body actual3.body &&
113 git diff --ignore-submodules=dirty HEAD >actual4 &&
117 test_expect_success 'git diff HEAD with dirty submodule (index, refs match)' '
124 git diff HEAD >actual &&
125 sed -e "1,/^@@/d" actual >actual.body &&
126 expect_from_to >expect.body $subprev $subprev-dirty &&
127 test_cmp expect.body actual.body
130 test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)' '
137 git diff HEAD >actual &&
138 sed -e "1,/^@@/d" actual >actual.body &&
139 expect_from_to >expect.body $subprev $subprev-dirty &&
140 test_cmp expect.body actual.body &&
141 git diff --ignore-submodules=all HEAD >actual2 &&
143 git diff --ignore-submodules=untracked HEAD >actual3 &&
145 git diff --ignore-submodules=dirty HEAD >actual4 &&
149 test_expect_success 'git diff (empty submodule dir)' '
151 rm -rf sub/* sub/.git &&
152 git diff > actual.empty &&
153 test_cmp empty actual.empty
156 test_expect_success 'conflicted submodule setup' '
159 c=fffffffffffffffffffffffffffffffffffffff
161 echo "000000 $_z40 0 sub"
162 echo "160000 1$c 1 sub"
163 echo "160000 2$c 2 sub"
164 echo "160000 3$c 3 sub"
165 ) | git update-index --index-info &&
166 echo >expect.nosub '\''diff --cc sub
167 index 2ffffff,3ffffff..0000000
170 @@@ -1,1 -1,1 +1,1 @@@
171 - Subproject commit 2fffffffffffffffffffffffffffffffffffffff
172 -Subproject commit 3fffffffffffffffffffffffffffffffffffffff
173 ++Subproject commit 0000000000000000000000000000000000000000'\'' &&
175 hh=$(git rev-parse HEAD) &&
176 sed -e "s/$_z40/$hh/" expect.nosub >expect.withsub
180 test_expect_success 'combined (empty submodule)' '
181 rm -fr sub && mkdir sub &&
183 test_cmp expect.nosub actual
186 test_expect_success 'combined (with submodule)' '
188 git clone --no-checkout . sub &&
190 test_cmp expect.withsub actual