blob: e29deaf4a509523b00e6bf9ac5d2436957a1b022 [file] [log] [blame]
Junio C Hamano2b459b42008-03-02 00:07:59 -08001#!/bin/sh
2
3test_description='difference in submodules'
4
5. ./test-lib.sh
Junio C Hamanobfdbee92008-08-08 02:26:28 -07006. "$TEST_DIRECTORY"/diff-lib.sh
Junio C Hamano2b459b42008-03-02 00:07:59 -08007
Junio C Hamano2b459b42008-03-02 00:07:59 -08008test_expect_success setup '
brian m. carlson45e2ef22019-10-28 00:59:01 +00009 test_oid_init &&
Junio C Hamano2b459b42008-03-02 00:07:59 -080010 test_tick &&
11 test_create_repo sub &&
12 (
13 cd sub &&
14 echo hello >world &&
15 git add world &&
16 git commit -m submodule
17 ) &&
18
19 test_tick &&
20 echo frotz >nitfol &&
21 git add nitfol sub &&
22 git commit -m superproject &&
23
24 (
25 cd sub &&
26 echo goodbye >world &&
27 git add world &&
28 git commit -m "submodule #2"
29 ) &&
30
31 set x $(
32 cd sub &&
33 git rev-list HEAD
34 ) &&
brian m. carlson8125a582018-05-13 02:24:13 +000035 echo ":160000 160000 $3 $ZERO_OID M sub" >expect &&
Junio C Hamano8e08b412010-01-16 18:42:53 +010036 subtip=$3 subprev=$2
Junio C Hamano2b459b42008-03-02 00:07:59 -080037'
38
39test_expect_success 'git diff --raw HEAD' '
brian m. carlson45e2ef22019-10-28 00:59:01 +000040 hexsz=$(test_oid hexsz) &&
41 git diff --raw --abbrev=$hexsz HEAD >actual &&
Jeff King82ebb0b2008-03-12 17:36:36 -040042 test_cmp expect actual
Junio C Hamano2b459b42008-03-02 00:07:59 -080043'
44
45test_expect_success 'git diff-index --raw HEAD' '
46 git diff-index --raw HEAD >actual.index &&
Jeff King82ebb0b2008-03-12 17:36:36 -040047 test_cmp expect actual.index
Junio C Hamano2b459b42008-03-02 00:07:59 -080048'
49
50test_expect_success 'git diff-files --raw' '
51 git diff-files --raw >actual.files &&
Jeff King82ebb0b2008-03-12 17:36:36 -040052 test_cmp expect actual.files
Junio C Hamano2b459b42008-03-02 00:07:59 -080053'
54
Junio C Hamano8e08b412010-01-16 18:42:53 +010055expect_from_to () {
56 printf "%sSubproject commit %s\n+Subproject commit %s\n" \
57 "-" "$1" "$2"
58}
59
60test_expect_success 'git diff HEAD' '
61 git diff HEAD >actual &&
62 sed -e "1,/^@@/d" actual >actual.body &&
63 expect_from_to >expect.body $subtip $subprev &&
64 test_cmp expect.body actual.body
65'
66
67test_expect_success 'git diff HEAD with dirty submodule (work tree)' '
68 echo >>sub/world &&
69 git diff HEAD >actual &&
70 sed -e "1,/^@@/d" actual >actual.body &&
71 expect_from_to >expect.body $subtip $subprev-dirty &&
72 test_cmp expect.body actual.body
73'
74
75test_expect_success 'git diff HEAD with dirty submodule (index)' '
76 (
77 cd sub &&
78 git reset --hard &&
79 echo >>world &&
80 git add world
81 ) &&
82 git diff HEAD >actual &&
83 sed -e "1,/^@@/d" actual >actual.body &&
84 expect_from_to >expect.body $subtip $subprev-dirty &&
85 test_cmp expect.body actual.body
86'
87
88test_expect_success 'git diff HEAD with dirty submodule (untracked)' '
89 (
90 cd sub &&
91 git reset --hard &&
92 git clean -qfdx &&
93 >cruft
94 ) &&
95 git diff HEAD >actual &&
96 sed -e "1,/^@@/d" actual >actual.body &&
97 expect_from_to >expect.body $subtip $subprev-dirty &&
98 test_cmp expect.body actual.body
99'
100
101test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)' '
102 git commit -m "x" sub &&
103 echo >>sub/world &&
104 git diff HEAD >actual &&
105 sed -e "1,/^@@/d" actual >actual.body &&
106 expect_from_to >expect.body $subprev $subprev-dirty &&
Jens Lehmanndd44d412010-06-08 18:31:51 +0200107 test_cmp expect.body actual.body &&
108 git diff --ignore-submodules HEAD >actual2 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200109 test_must_be_empty actual2 &&
Jens Lehmanndd44d412010-06-08 18:31:51 +0200110 git diff --ignore-submodules=untracked HEAD >actual3 &&
111 sed -e "1,/^@@/d" actual3 >actual3.body &&
112 expect_from_to >expect.body $subprev $subprev-dirty &&
113 test_cmp expect.body actual3.body &&
114 git diff --ignore-submodules=dirty HEAD >actual4 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200115 test_must_be_empty actual4
Junio C Hamano8e08b412010-01-16 18:42:53 +0100116'
Brian Gernhardt6ed7dda2010-06-25 13:20:48 -0400117
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200118test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]' '
Jens Lehmann90e14522010-08-06 01:27:15 +0200119 git config diff.ignoreSubmodules dirty &&
120 git diff HEAD >actual &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200121 test_must_be_empty actual &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200122 git config --add -f .gitmodules submodule.subname.ignore none &&
123 git config --add -f .gitmodules submodule.subname.path sub &&
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 &&
128 git config -f .gitmodules submodule.subname.ignore all &&
129 git config -f .gitmodules submodule.subname.path sub &&
130 git diff HEAD >actual2 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200131 test_must_be_empty actual2 &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200132 git config -f .gitmodules submodule.subname.ignore untracked &&
133 git diff HEAD >actual3 &&
134 sed -e "1,/^@@/d" actual3 >actual3.body &&
135 expect_from_to >expect.body $subprev $subprev-dirty &&
136 test_cmp expect.body actual3.body &&
137 git config -f .gitmodules submodule.subname.ignore dirty &&
138 git diff HEAD >actual4 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200139 test_must_be_empty actual4 &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200140 git config submodule.subname.ignore none &&
141 git config submodule.subname.path sub &&
142 git diff HEAD >actual &&
143 sed -e "1,/^@@/d" actual >actual.body &&
144 expect_from_to >expect.body $subprev $subprev-dirty &&
145 test_cmp expect.body actual.body &&
146 git config --remove-section submodule.subname &&
147 git config --remove-section -f .gitmodules submodule.subname &&
Jens Lehmann90e14522010-08-06 01:27:15 +0200148 git config --unset diff.ignoreSubmodules &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200149 rm .gitmodules
150'
151
Junio C Hamano8e08b412010-01-16 18:42:53 +0100152test_expect_success 'git diff HEAD with dirty submodule (index, refs match)' '
153 (
154 cd sub &&
155 git reset --hard &&
156 echo >>world &&
157 git add world
158 ) &&
159 git diff HEAD >actual &&
160 sed -e "1,/^@@/d" actual >actual.body &&
161 expect_from_to >expect.body $subprev $subprev-dirty &&
162 test_cmp expect.body actual.body
163'
164
165test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)' '
166 (
167 cd sub &&
168 git reset --hard &&
169 git clean -qfdx &&
170 >cruft
171 ) &&
172 git diff HEAD >actual &&
173 sed -e "1,/^@@/d" actual >actual.body &&
174 expect_from_to >expect.body $subprev $subprev-dirty &&
Jens Lehmanndd44d412010-06-08 18:31:51 +0200175 test_cmp expect.body actual.body &&
176 git diff --ignore-submodules=all HEAD >actual2 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200177 test_must_be_empty actual2 &&
Jens Lehmanndd44d412010-06-08 18:31:51 +0200178 git diff --ignore-submodules=untracked HEAD >actual3 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200179 test_must_be_empty actual3 &&
Jens Lehmanndd44d412010-06-08 18:31:51 +0200180 git diff --ignore-submodules=dirty HEAD >actual4 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200181 test_must_be_empty actual4
Junio C Hamano8e08b412010-01-16 18:42:53 +0100182'
183
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200184test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]' '
185 git config --add -f .gitmodules submodule.subname.ignore all &&
186 git config --add -f .gitmodules submodule.subname.path sub &&
187 git diff HEAD >actual2 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200188 test_must_be_empty actual2 &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200189 git config -f .gitmodules submodule.subname.ignore untracked &&
190 git diff HEAD >actual3 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200191 test_must_be_empty actual3 &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200192 git config -f .gitmodules submodule.subname.ignore dirty &&
193 git diff HEAD >actual4 &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200194 test_must_be_empty actual4 &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200195 git config submodule.subname.ignore none &&
196 git config submodule.subname.path sub &&
197 git diff HEAD >actual &&
198 sed -e "1,/^@@/d" actual >actual.body &&
199 expect_from_to >expect.body $subprev $subprev-dirty &&
200 test_cmp expect.body actual.body &&
201 git config --remove-section submodule.subname &&
202 git config --remove-section -f .gitmodules submodule.subname &&
203 rm .gitmodules
204'
205
Jens Lehmannaee9c7d2010-08-06 00:39:25 +0200206test_expect_success 'git diff between submodule commits' '
207 git diff HEAD^..HEAD >actual &&
208 sed -e "1,/^@@/d" actual >actual.body &&
209 expect_from_to >expect.body $subtip $subprev &&
210 test_cmp expect.body actual.body &&
211 git diff --ignore-submodules=dirty HEAD^..HEAD >actual &&
212 sed -e "1,/^@@/d" actual >actual.body &&
213 expect_from_to >expect.body $subtip $subprev &&
214 test_cmp expect.body actual.body &&
215 git diff --ignore-submodules HEAD^..HEAD >actual &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200216 test_must_be_empty actual
Jens Lehmannaee9c7d2010-08-06 00:39:25 +0200217'
218
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200219test_expect_success 'git diff between submodule commits [.gitmodules]' '
220 git diff HEAD^..HEAD >actual &&
221 sed -e "1,/^@@/d" actual >actual.body &&
222 expect_from_to >expect.body $subtip $subprev &&
223 test_cmp expect.body actual.body &&
224 git config --add -f .gitmodules submodule.subname.ignore dirty &&
225 git config --add -f .gitmodules submodule.subname.path sub &&
226 git diff HEAD^..HEAD >actual &&
227 sed -e "1,/^@@/d" actual >actual.body &&
228 expect_from_to >expect.body $subtip $subprev &&
229 test_cmp expect.body actual.body &&
230 git config -f .gitmodules submodule.subname.ignore all &&
231 git diff HEAD^..HEAD >actual &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200232 test_must_be_empty actual &&
Jens Lehmann302ad7a2010-08-06 00:40:48 +0200233 git config submodule.subname.ignore dirty &&
234 git config submodule.subname.path sub &&
235 git diff HEAD^..HEAD >actual &&
236 sed -e "1,/^@@/d" actual >actual.body &&
237 expect_from_to >expect.body $subtip $subprev &&
238 git config --remove-section submodule.subname &&
239 git config --remove-section -f .gitmodules submodule.subname &&
240 rm .gitmodules
241'
242
Junio C Hamano1392a372008-05-03 17:04:42 -0700243test_expect_success 'git diff (empty submodule dir)' '
Ping Yin7c08a2a2008-05-02 21:35:33 +0800244 rm -rf sub/* sub/.git &&
245 git diff > actual.empty &&
SZEDER Gábor1c5e94f2018-08-19 23:57:25 +0200246 test_must_be_empty actual.empty
Ping Yin7c08a2a2008-05-02 21:35:33 +0800247'
248
Junio C Hamano7dae8b22009-04-29 12:49:52 -0700249test_expect_success 'conflicted submodule setup' '
brian m. carlson45e2ef22019-10-28 00:59:01 +0000250 c=$(test_oid ff_1) &&
Junio C Hamano7dae8b22009-04-29 12:49:52 -0700251 (
brian m. carlson8125a582018-05-13 02:24:13 +0000252 echo "000000 $ZERO_OID 0 sub" &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -0500253 echo "160000 1$c 1 sub" &&
254 echo "160000 2$c 2 sub" &&
Junio C Hamano7dae8b22009-04-29 12:49:52 -0700255 echo "160000 3$c 3 sub"
256 ) | git update-index --index-info &&
brian m. carlson45e2ef22019-10-28 00:59:01 +0000257 echo >expect.nosub "diff --cc sub
Junio C Hamano7dae8b22009-04-29 12:49:52 -0700258index 2ffffff,3ffffff..0000000
259--- a/sub
260+++ b/sub
261@@@ -1,1 -1,1 +1,1 @@@
brian m. carlson45e2ef22019-10-28 00:59:01 +0000262- Subproject commit 2$c
263 -Subproject commit 3$c
264++Subproject commit $ZERO_OID" &&
Junio C Hamano7dae8b22009-04-29 12:49:52 -0700265
266 hh=$(git rev-parse HEAD) &&
brian m. carlson8125a582018-05-13 02:24:13 +0000267 sed -e "s/$ZERO_OID/$hh/" expect.nosub >expect.withsub
Junio C Hamano7dae8b22009-04-29 12:49:52 -0700268
269'
270
271test_expect_success 'combined (empty submodule)' '
272 rm -fr sub && mkdir sub &&
273 git diff >actual &&
274 test_cmp expect.nosub actual
275'
276
277test_expect_success 'combined (with submodule)' '
278 rm -fr sub &&
279 git clone --no-checkout . sub &&
280 git diff >actual &&
281 test_cmp expect.withsub actual
282'
283
284
285
Junio C Hamano2b459b42008-03-02 00:07:59 -0800286test_done