blob: 7184113b9b2b381a6e7e0def8a8c1ba06771f8a6 [file] [log] [blame]
Brandon Williams0281e482016-12-16 11:03:20 -08001#!/bin/sh
2
3test_description='Test grep recurse-submodules feature
4
5This test verifies the recurse-submodules feature correctly greps across
6submodules.
7'
8
9. ./test-lib.sh
10
11test_expect_success 'setup directory structure and submodule' '
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000012 echo "(1|2)d(3|4)" >a &&
Brandon Williams0281e482016-12-16 11:03:20 -080013 mkdir b &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000014 echo "(3|4)" >b/b &&
Brandon Williams0281e482016-12-16 11:03:20 -080015 git add a b &&
16 git commit -m "add a and b" &&
17 git init submodule &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000018 echo "(1|2)d(3|4)" >submodule/a &&
Brandon Williams0281e482016-12-16 11:03:20 -080019 git -C submodule add a &&
20 git -C submodule commit -m "add a" &&
21 git submodule add ./submodule &&
22 git commit -m "added submodule"
23'
24
25test_expect_success 'grep correctly finds patterns in a submodule' '
26 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000027 a:(1|2)d(3|4)
28 b/b:(3|4)
29 submodule/a:(1|2)d(3|4)
Brandon Williams0281e482016-12-16 11:03:20 -080030 EOF
31
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000032 git grep -e "(3|4)" --recurse-submodules >actual &&
Brandon Williams0281e482016-12-16 11:03:20 -080033 test_cmp expect actual
34'
35
Stefan Beller9071c072017-05-31 17:30:48 -070036test_expect_success 'grep finds patterns in a submodule via config' '
37 test_config submodule.recurse true &&
38 # expect from previous test
39 git grep -e "(3|4)" >actual &&
40 test_cmp expect actual
41'
42
43test_expect_success 'grep --no-recurse-submodules overrides config' '
44 test_config submodule.recurse true &&
45 cat >expect <<-\EOF &&
46 a:(1|2)d(3|4)
47 b/b:(3|4)
48 EOF
49
50 git grep -e "(3|4)" --no-recurse-submodules >actual &&
51 test_cmp expect actual
52'
53
Brandon Williams0281e482016-12-16 11:03:20 -080054test_expect_success 'grep and basic pathspecs' '
55 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000056 submodule/a:(1|2)d(3|4)
Brandon Williams0281e482016-12-16 11:03:20 -080057 EOF
58
59 git grep -e. --recurse-submodules -- submodule >actual &&
60 test_cmp expect actual
61'
62
63test_expect_success 'grep and nested submodules' '
64 git init submodule/sub &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000065 echo "(1|2)d(3|4)" >submodule/sub/a &&
Brandon Williams0281e482016-12-16 11:03:20 -080066 git -C submodule/sub add a &&
67 git -C submodule/sub commit -m "add a" &&
68 git -C submodule submodule add ./sub &&
69 git -C submodule add sub &&
70 git -C submodule commit -m "added sub" &&
71 git add submodule &&
72 git commit -m "updated submodule" &&
73
74 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000075 a:(1|2)d(3|4)
76 b/b:(3|4)
77 submodule/a:(1|2)d(3|4)
78 submodule/sub/a:(1|2)d(3|4)
Brandon Williams0281e482016-12-16 11:03:20 -080079 EOF
80
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000081 git grep -e "(3|4)" --recurse-submodules >actual &&
Brandon Williams0281e482016-12-16 11:03:20 -080082 test_cmp expect actual
83'
84
85test_expect_success 'grep and multiple patterns' '
86 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000087 a:(1|2)d(3|4)
88 submodule/a:(1|2)d(3|4)
89 submodule/sub/a:(1|2)d(3|4)
Brandon Williams0281e482016-12-16 11:03:20 -080090 EOF
91
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000092 git grep -e "(3|4)" --and -e "(1|2)" --recurse-submodules >actual &&
Brandon Williams0281e482016-12-16 11:03:20 -080093 test_cmp expect actual
94'
95
96test_expect_success 'grep and multiple patterns' '
97 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +000098 b/b:(3|4)
Brandon Williams0281e482016-12-16 11:03:20 -080099 EOF
100
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000101 git grep -e "(3|4)" --and --not -e "(1|2)" --recurse-submodules >actual &&
Brandon Williams0281e482016-12-16 11:03:20 -0800102 test_cmp expect actual
103'
104
Brandon Williams74ed4372016-12-16 11:03:21 -0800105test_expect_success 'basic grep tree' '
106 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000107 HEAD:a:(1|2)d(3|4)
108 HEAD:b/b:(3|4)
109 HEAD:submodule/a:(1|2)d(3|4)
110 HEAD:submodule/sub/a:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800111 EOF
112
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000113 git grep -e "(3|4)" --recurse-submodules HEAD >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800114 test_cmp expect actual
115'
116
117test_expect_success 'grep tree HEAD^' '
118 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000119 HEAD^:a:(1|2)d(3|4)
120 HEAD^:b/b:(3|4)
121 HEAD^:submodule/a:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800122 EOF
123
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000124 git grep -e "(3|4)" --recurse-submodules HEAD^ >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800125 test_cmp expect actual
126'
127
128test_expect_success 'grep tree HEAD^^' '
129 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000130 HEAD^^:a:(1|2)d(3|4)
131 HEAD^^:b/b:(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800132 EOF
133
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000134 git grep -e "(3|4)" --recurse-submodules HEAD^^ >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800135 test_cmp expect actual
136'
137
138test_expect_success 'grep tree and pathspecs' '
139 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000140 HEAD:submodule/a:(1|2)d(3|4)
141 HEAD:submodule/sub/a:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800142 EOF
143
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000144 git grep -e "(3|4)" --recurse-submodules HEAD -- submodule >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800145 test_cmp expect actual
146'
147
148test_expect_success 'grep tree and pathspecs' '
149 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000150 HEAD:submodule/a:(1|2)d(3|4)
151 HEAD:submodule/sub/a:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800152 EOF
153
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000154 git grep -e "(3|4)" --recurse-submodules HEAD -- "submodule*a" >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800155 test_cmp expect actual
156'
157
158test_expect_success 'grep tree and more pathspecs' '
159 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000160 HEAD:submodule/a:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800161 EOF
162
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000163 git grep -e "(3|4)" --recurse-submodules HEAD -- "submodul?/a" >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800164 test_cmp expect actual
165'
166
167test_expect_success 'grep tree and more pathspecs' '
168 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000169 HEAD:submodule/sub/a:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800170 EOF
171
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000172 git grep -e "(3|4)" --recurse-submodules HEAD -- "submodul*/sub/a" >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800173 test_cmp expect actual
174'
175
176test_expect_success !MINGW 'grep recurse submodule colon in name' '
177 git init parent &&
178 test_when_finished "rm -rf parent" &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000179 echo "(1|2)d(3|4)" >"parent/fi:le" &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800180 git -C parent add "fi:le" &&
181 git -C parent commit -m "add fi:le" &&
182
183 git init "su:b" &&
184 test_when_finished "rm -rf su:b" &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000185 echo "(1|2)d(3|4)" >"su:b/fi:le" &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800186 git -C "su:b" add "fi:le" &&
187 git -C "su:b" commit -m "add fi:le" &&
188
189 git -C parent submodule add "../su:b" "su:b" &&
190 git -C parent commit -m "add submodule" &&
191
192 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000193 fi:le:(1|2)d(3|4)
194 su:b/fi:le:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800195 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000196 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800197 test_cmp expect actual &&
198
199 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000200 HEAD:fi:le:(1|2)d(3|4)
201 HEAD:su:b/fi:le:(1|2)d(3|4)
Brandon Williams74ed4372016-12-16 11:03:21 -0800202 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000203 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules HEAD >actual &&
Brandon Williams74ed4372016-12-16 11:03:21 -0800204 test_cmp expect actual
205'
206
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800207test_expect_success 'grep history with moved submoules' '
208 git init parent &&
209 test_when_finished "rm -rf parent" &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000210 echo "(1|2)d(3|4)" >parent/file &&
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800211 git -C parent add file &&
212 git -C parent commit -m "add file" &&
213
214 git init sub &&
215 test_when_finished "rm -rf sub" &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000216 echo "(1|2)d(3|4)" >sub/file &&
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800217 git -C sub add file &&
218 git -C sub commit -m "add file" &&
219
220 git -C parent submodule add ../sub dir/sub &&
221 git -C parent commit -m "add submodule" &&
222
223 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000224 dir/sub/file:(1|2)d(3|4)
225 file:(1|2)d(3|4)
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800226 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000227 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800228 test_cmp expect actual &&
229
230 git -C parent mv dir/sub sub-moved &&
231 git -C parent commit -m "moved submodule" &&
232
233 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000234 file:(1|2)d(3|4)
235 sub-moved/file:(1|2)d(3|4)
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800236 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000237 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800238 test_cmp expect actual &&
239
240 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000241 HEAD^:dir/sub/file:(1|2)d(3|4)
242 HEAD^:file:(1|2)d(3|4)
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800243 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000244 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules HEAD^ >actual &&
Brandon Williamse6fac7f2016-12-16 11:03:22 -0800245 test_cmp expect actual
246'
247
Brandon Williamsbe80a232017-03-17 10:22:55 -0700248test_expect_success 'grep using relative path' '
249 test_when_finished "rm -rf parent sub" &&
250 git init sub &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000251 echo "(1|2)d(3|4)" >sub/file &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700252 git -C sub add file &&
253 git -C sub commit -m "add file" &&
254
255 git init parent &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000256 echo "(1|2)d(3|4)" >parent/file &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700257 git -C parent add file &&
258 mkdir parent/src &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000259 echo "(1|2)d(3|4)" >parent/src/file2 &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700260 git -C parent add src/file2 &&
261 git -C parent submodule add ../sub &&
262 git -C parent commit -m "add files and submodule" &&
263
264 # From top works
265 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000266 file:(1|2)d(3|4)
267 src/file2:(1|2)d(3|4)
268 sub/file:(1|2)d(3|4)
Brandon Williamsbe80a232017-03-17 10:22:55 -0700269 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000270 git -C parent grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700271 test_cmp expect actual &&
272
273 # Relative path to top
274 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000275 ../file:(1|2)d(3|4)
276 file2:(1|2)d(3|4)
277 ../sub/file:(1|2)d(3|4)
Brandon Williamsbe80a232017-03-17 10:22:55 -0700278 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000279 git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" -- .. >actual &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700280 test_cmp expect actual &&
281
282 # Relative path to submodule
283 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000284 ../sub/file:(1|2)d(3|4)
Brandon Williamsbe80a232017-03-17 10:22:55 -0700285 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000286 git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" -- ../sub >actual &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700287 test_cmp expect actual
288'
289
290test_expect_success 'grep from a subdir' '
291 test_when_finished "rm -rf parent sub" &&
292 git init sub &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000293 echo "(1|2)d(3|4)" >sub/file &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700294 git -C sub add file &&
295 git -C sub commit -m "add file" &&
296
297 git init parent &&
298 mkdir parent/src &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000299 echo "(1|2)d(3|4)" >parent/src/file &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700300 git -C parent add src/file &&
301 git -C parent submodule add ../sub src/sub &&
302 git -C parent submodule add ../sub sub &&
303 git -C parent commit -m "add files and submodules" &&
304
305 # Verify grep from root works
306 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000307 src/file:(1|2)d(3|4)
308 src/sub/file:(1|2)d(3|4)
309 sub/file:(1|2)d(3|4)
Brandon Williamsbe80a232017-03-17 10:22:55 -0700310 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000311 git -C parent grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700312 test_cmp expect actual &&
313
314 # Verify grep from a subdir works
315 cat >expect <<-\EOF &&
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000316 file:(1|2)d(3|4)
317 sub/file:(1|2)d(3|4)
Brandon Williamsbe80a232017-03-17 10:22:55 -0700318 EOF
Ævar Arnfjörð Bjarmason5d52a302017-05-20 21:42:13 +0000319 git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
Brandon Williamsbe80a232017-03-17 10:22:55 -0700320 test_cmp expect actual
321'
322
Brandon Williams0281e482016-12-16 11:03:20 -0800323test_incompatible_with_recurse_submodules ()
324{
325 test_expect_success "--recurse-submodules and $1 are incompatible" "
326 test_must_fail git grep -e. --recurse-submodules $1 2>actual &&
327 test_i18ngrep 'not supported with --recurse-submodules' actual
328 "
329}
330
331test_incompatible_with_recurse_submodules --untracked
332test_incompatible_with_recurse_submodules --no-index
Brandon Williams0281e482016-12-16 11:03:20 -0800333
Ævar Arnfjörð Bjarmason5ee6f1a2017-05-20 21:42:14 +0000334test_expect_success 'grep --recurse-submodules should pass the pattern type along' '
335 # Fixed
336 test_must_fail git grep -F --recurse-submodules -e "(.|.)[\d]" &&
337 test_must_fail git -c grep.patternType=fixed grep --recurse-submodules -e "(.|.)[\d]" &&
338
339 # Basic
340 git grep -G --recurse-submodules -e "(.|.)[\d]" >actual &&
341 cat >expect <<-\EOF &&
342 a:(1|2)d(3|4)
343 submodule/a:(1|2)d(3|4)
344 submodule/sub/a:(1|2)d(3|4)
345 EOF
346 test_cmp expect actual &&
347 git -c grep.patternType=basic grep --recurse-submodules -e "(.|.)[\d]" >actual &&
348 test_cmp expect actual &&
349
350 # Extended
351 git grep -E --recurse-submodules -e "(.|.)[\d]" >actual &&
352 cat >expect <<-\EOF &&
353 .gitmodules:[submodule "submodule"]
354 .gitmodules: path = submodule
355 .gitmodules: url = ./submodule
356 a:(1|2)d(3|4)
357 submodule/.gitmodules:[submodule "sub"]
358 submodule/a:(1|2)d(3|4)
359 submodule/sub/a:(1|2)d(3|4)
360 EOF
361 test_cmp expect actual &&
362 git -c grep.patternType=extended grep --recurse-submodules -e "(.|.)[\d]" >actual &&
363 test_cmp expect actual &&
364 git -c grep.extendedRegexp=true grep --recurse-submodules -e "(.|.)[\d]" >actual &&
365 test_cmp expect actual &&
366
367 # Perl
368 if test_have_prereq PCRE
369 then
370 git grep -P --recurse-submodules -e "(.|.)[\d]" >actual &&
371 cat >expect <<-\EOF &&
372 a:(1|2)d(3|4)
373 b/b:(3|4)
374 submodule/a:(1|2)d(3|4)
375 submodule/sub/a:(1|2)d(3|4)
376 EOF
377 test_cmp expect actual &&
378 git -c grep.patternType=perl grep --recurse-submodules -e "(.|.)[\d]" >actual &&
379 test_cmp expect actual
380 fi
381'
382
Brandon Williams0281e482016-12-16 11:03:20 -0800383test_done