]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7401-submodule-summary.sh
Start the 2.46 cycle
[thirdparty/git.git] / t / t7401-submodule-summary.sh
CommitLineData
2da2ddc6
PY
1#!/bin/sh
2#
3# Copyright (c) 2008 Ping Yin
4#
5
6test_description='Summary support for submodules
7
2a0d1a5c 8This test script tries to verify the sanity of summary subcommand of git submodule.
2da2ddc6 9'
bbdba3d8 10
ede8a5bb
SS
11# NOTE: This test script uses 'git add' instead of 'git submodule add' to add
12# submodules to the superproject. Some submodule subcommands such as init and
13# deinit might not work as expected in this script. t7421 does not have this
14# caveat.
bbdba3d8 15#
2a0d1a5c
SS
16# NEEDSWORK: This test script is old fashioned and may need a big cleanup due to
17# various reasons, one of them being that there are lots of commands taking place
18# outside of 'test_expect_success' block, which is no longer in good-style.
2da2ddc6 19
980416e4 20TEST_PASSES_SANITIZE_LEAK=true
2da2ddc6
PY
21. ./test-lib.sh
22
23add_file () {
24 sm=$1
25 shift
26 owd=$(pwd)
27 cd "$sm"
28 for name; do
94e06c90 29 echo "$name" >"$name" &&
2da2ddc6
PY
30 git add "$name" &&
31 test_tick &&
32 git commit -m "Add $name"
33 done >/dev/null
7303da30 34 git rev-parse --short HEAD
2da2ddc6
PY
35 cd "$owd"
36}
37commit_file () {
38 test_tick &&
39 git commit "$@" -m "Commit $*" >/dev/null
40}
41
42test_create_repo sm1 &&
02604e29 43add_file . foo >/dev/null
2da2ddc6
PY
44
45head1=$(add_file sm1 foo1 foo2)
46
47test_expect_success 'added submodule' "
48 git add sm1 &&
49 git submodule summary >actual &&
f8d186bb 50 cat >expected <<-EOF &&
3a4fdeee
SS
51 * sm1 0000000...$head1 (2):
52 > Add foo2
091a6eb0 53
3a4fdeee 54 EOF
091a6eb0
JK
55 test_cmp expected actual
56"
57
58test_expect_success 'added submodule (subdirectory)' "
59 mkdir sub &&
60 (
61 cd sub &&
62 git submodule summary >../actual
63 ) &&
64 cat >expected <<-EOF &&
3a4fdeee
SS
65 * ../sm1 0000000...$head1 (2):
66 > Add foo2
091a6eb0 67
3a4fdeee 68 EOF
091a6eb0
JK
69 test_cmp expected actual
70"
71
72test_expect_success 'added submodule (subdirectory only)' "
73 (
74 cd sub &&
75 git submodule summary . >../actual
76 ) &&
d3c6751b 77 test_must_be_empty actual
091a6eb0
JK
78"
79
80test_expect_success 'added submodule (subdirectory with explicit path)' "
81 (
82 cd sub &&
83 git submodule summary ../sm1 >../actual
84 ) &&
85 cat >expected <<-EOF &&
3a4fdeee
SS
86 * ../sm1 0000000...$head1 (2):
87 > Add foo2
2da2ddc6 88
3a4fdeee 89 EOF
f8d186bb 90 test_cmp expected actual
2da2ddc6
PY
91"
92
93commit_file sm1 &&
94head2=$(add_file sm1 foo3)
95
96test_expect_success 'modified submodule(forward)' "
97 git submodule summary >actual &&
f8d186bb 98 cat >expected <<-EOF &&
3a4fdeee
SS
99 * sm1 $head1...$head2 (1):
100 > Add foo3
2da2ddc6 101
3a4fdeee 102 EOF
f8d186bb 103 test_cmp expected actual
2da2ddc6
PY
104"
105
1c244f6e
JL
106test_expect_success 'modified submodule(forward), --files' "
107 git submodule summary --files >actual &&
f8d186bb 108 cat >expected <<-EOF &&
3a4fdeee
SS
109 * sm1 $head1...$head2 (1):
110 > Add foo3
1c244f6e 111
3a4fdeee 112 EOF
f8d186bb 113 test_cmp expected actual
1c244f6e
JL
114"
115
927b26f8 116test_expect_success 'no ignore=all setting has any effect' "
117 git config -f .gitmodules submodule.sm1.path sm1 &&
118 git config -f .gitmodules submodule.sm1.ignore all &&
119 git config submodule.sm1.ignore all &&
120 git config diff.ignoreSubmodules all &&
121 git submodule summary >actual &&
122 cat >expected <<-EOF &&
3a4fdeee
SS
123 * sm1 $head1...$head2 (1):
124 > Add foo3
927b26f8 125
3a4fdeee 126 EOF
927b26f8 127 test_cmp expected actual &&
128 git config --unset diff.ignoreSubmodules &&
129 git config --remove-section submodule.sm1 &&
130 git config -f .gitmodules --remove-section submodule.sm1
131"
132
133
2da2ddc6 134commit_file sm1 &&
18a82692
JN
135head3=$(
136 cd sm1 &&
137 git reset --hard HEAD~2 >/dev/null &&
7303da30 138 git rev-parse --short HEAD
fd4ec4f2 139)
2da2ddc6
PY
140
141test_expect_success 'modified submodule(backward)' "
8120e421
JK
142 git submodule summary >actual &&
143 cat >expected <<-EOF &&
3a4fdeee
SS
144 * sm1 $head2...$head3 (2):
145 < Add foo3
146 < Add foo2
2da2ddc6 147
3a4fdeee 148 EOF
f8d186bb 149 test_cmp expected actual
2da2ddc6
PY
150"
151
152head4=$(add_file sm1 foo4 foo5) &&
153head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD)
154test_expect_success 'modified submodule(backward and forward)' "
8120e421
JK
155 git submodule summary >actual &&
156 cat >expected <<-EOF &&
3a4fdeee
SS
157 * sm1 $head2...$head4 (4):
158 > Add foo5
159 > Add foo4
160 < Add foo3
161 < Add foo2
2da2ddc6 162
3a4fdeee 163 EOF
f8d186bb 164 test_cmp expected actual
2da2ddc6
PY
165"
166
167test_expect_success '--summary-limit' "
8120e421
JK
168 git submodule summary -n 3 >actual &&
169 cat >expected <<-EOF &&
3a4fdeee
SS
170 * sm1 $head2...$head4 (4):
171 > Add foo5
172 > Add foo4
173 < Add foo3
2da2ddc6 174
3a4fdeee 175 EOF
8120e421 176 test_cmp expected actual
2da2ddc6
PY
177"
178
179commit_file sm1 &&
180mv sm1 sm1-bak &&
181echo sm1 >sm1 &&
182head5=$(git hash-object sm1 | cut -c1-7) &&
183git add sm1 &&
184rm -f sm1 &&
185mv sm1-bak sm1
186
187test_expect_success 'typechanged submodule(submodule->blob), --cached' "
8120e421
JK
188 git submodule summary --cached >actual &&
189 cat >expected <<-EOF &&
3a4fdeee
SS
190 * sm1 $head4(submodule)->$head5(blob) (3):
191 < Add foo5
2da2ddc6 192
3a4fdeee 193 EOF
1108cea7 194 test_cmp expected actual
2da2ddc6
PY
195"
196
1c244f6e 197test_expect_success 'typechanged submodule(submodule->blob), --files' "
8120e421
JK
198 git submodule summary --files >actual &&
199 cat >expected <<-EOF &&
3a4fdeee
SS
200 * sm1 $head5(blob)->$head4(submodule) (3):
201 > Add foo5
1c244f6e 202
3a4fdeee 203 EOF
1108cea7 204 test_cmp expected actual
1c244f6e
JL
205"
206
2da2ddc6
PY
207rm -rf sm1 &&
208git checkout-index sm1
209test_expect_success 'typechanged submodule(submodule->blob)' "
8120e421
JK
210 git submodule summary >actual &&
211 cat >expected <<-EOF &&
3a4fdeee 212 * sm1 $head4(submodule)->$head5(blob):
2da2ddc6 213
3a4fdeee 214 EOF
1108cea7 215 test_cmp expected actual
2da2ddc6
PY
216"
217
218rm -f sm1 &&
219test_create_repo sm1 &&
220head6=$(add_file sm1 foo6 foo7)
221test_expect_success 'nonexistent commit' "
8120e421
JK
222 git submodule summary >actual &&
223 cat >expected <<-EOF &&
3a4fdeee
SS
224 * sm1 $head4...$head6:
225 Warn: sm1 doesn't contain commit $head4_full
2da2ddc6 226
3a4fdeee 227 EOF
1108cea7 228 test_cmp expected actual
2da2ddc6
PY
229"
230
231commit_file
232test_expect_success 'typechanged submodule(blob->submodule)' "
8120e421
JK
233 git submodule summary >actual &&
234 cat >expected <<-EOF &&
3a4fdeee
SS
235 * sm1 $head5(blob)->$head6(submodule) (2):
236 > Add foo7
2da2ddc6 237
3a4fdeee 238 EOF
1108cea7 239 test_cmp expected actual
2da2ddc6
PY
240"
241
242commit_file sm1 &&
243rm -rf sm1
244test_expect_success 'deleted submodule' "
8120e421
JK
245 git submodule summary >actual &&
246 cat >expected <<-EOF &&
3a4fdeee 247 * sm1 $head6...0000000:
2da2ddc6 248
3a4fdeee 249 EOF
8120e421 250 test_cmp expected actual
2da2ddc6
PY
251"
252
17f2f88c
JK
253test_expect_success 'create second submodule' '
254 test_create_repo sm2 &&
255 head7=$(add_file sm2 foo8 foo9) &&
256 git add sm2
257'
2da2ddc6
PY
258
259test_expect_success 'multiple submodules' "
8120e421
JK
260 git submodule summary >actual &&
261 cat >expected <<-EOF &&
3a4fdeee 262 * sm1 $head6...0000000:
2da2ddc6 263
3a4fdeee
SS
264 * sm2 0000000...$head7 (2):
265 > Add foo9
2da2ddc6 266
3a4fdeee 267 EOF
8120e421 268 test_cmp expected actual
2da2ddc6
PY
269"
270
271test_expect_success 'path filter' "
8120e421
JK
272 git submodule summary sm2 >actual &&
273 cat >expected <<-EOF &&
3a4fdeee
SS
274 * sm2 0000000...$head7 (2):
275 > Add foo9
2da2ddc6 276
3a4fdeee 277 EOF
8120e421 278 test_cmp expected actual
2da2ddc6
PY
279"
280
281commit_file sm2
282test_expect_success 'given commit' "
8120e421
JK
283 git submodule summary HEAD^ >actual &&
284 cat >expected <<-EOF &&
3a4fdeee 285 * sm1 $head6...0000000:
2da2ddc6 286
3a4fdeee
SS
287 * sm2 0000000...$head7 (2):
288 > Add foo9
2da2ddc6 289
3a4fdeee 290 EOF
8120e421 291 test_cmp expected actual
2da2ddc6
PY
292"
293
d0f64dd4 294test_expect_success '--for-status' "
8120e421 295 git submodule summary --for-status HEAD^ >actual &&
1108cea7 296 test_cmp - actual <<-EOF
3a4fdeee 297 * sm1 $head6...0000000:
3ba7407b 298
3a4fdeee
SS
299 * sm2 0000000...$head7 (2):
300 > Add foo9
3ba7407b 301
3a4fdeee 302 EOF
d0f64dd4
PY
303"
304
1c244f6e 305test_expect_success 'fail when using --files together with --cached' "
8120e421 306 test_must_fail git submodule summary --files --cached
1c244f6e
JL
307"
308
3deea89c 309test_expect_success 'should not fail in an empty repo' "
8120e421
JK
310 git init xyzzy &&
311 cd xyzzy &&
312 git submodule summary >output 2>&1 &&
ec21ac8c 313 test_must_be_empty output
3deea89c
JH
314"
315
2da2ddc6 316test_done