]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7814-grep-recurse-submodules.sh
grep: amend submodule recursion test for regex engine testing
[thirdparty/git.git] / t / t7814-grep-recurse-submodules.sh
CommitLineData
0281e487
BW
1#!/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' '
5d52a30e 12 echo "(1|2)d(3|4)" >a &&
0281e487 13 mkdir b &&
5d52a30e 14 echo "(3|4)" >b/b &&
0281e487
BW
15 git add a b &&
16 git commit -m "add a and b" &&
17 git init submodule &&
5d52a30e 18 echo "(1|2)d(3|4)" >submodule/a &&
0281e487
BW
19 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 &&
5d52a30e
ÆAB
27 a:(1|2)d(3|4)
28 b/b:(3|4)
29 submodule/a:(1|2)d(3|4)
0281e487
BW
30 EOF
31
5d52a30e 32 git grep -e "(3|4)" --recurse-submodules >actual &&
0281e487
BW
33 test_cmp expect actual
34'
35
36test_expect_success 'grep and basic pathspecs' '
37 cat >expect <<-\EOF &&
5d52a30e 38 submodule/a:(1|2)d(3|4)
0281e487
BW
39 EOF
40
41 git grep -e. --recurse-submodules -- submodule >actual &&
42 test_cmp expect actual
43'
44
45test_expect_success 'grep and nested submodules' '
46 git init submodule/sub &&
5d52a30e 47 echo "(1|2)d(3|4)" >submodule/sub/a &&
0281e487
BW
48 git -C submodule/sub add a &&
49 git -C submodule/sub commit -m "add a" &&
50 git -C submodule submodule add ./sub &&
51 git -C submodule add sub &&
52 git -C submodule commit -m "added sub" &&
53 git add submodule &&
54 git commit -m "updated submodule" &&
55
56 cat >expect <<-\EOF &&
5d52a30e
ÆAB
57 a:(1|2)d(3|4)
58 b/b:(3|4)
59 submodule/a:(1|2)d(3|4)
60 submodule/sub/a:(1|2)d(3|4)
0281e487
BW
61 EOF
62
5d52a30e 63 git grep -e "(3|4)" --recurse-submodules >actual &&
0281e487
BW
64 test_cmp expect actual
65'
66
67test_expect_success 'grep and multiple patterns' '
68 cat >expect <<-\EOF &&
5d52a30e
ÆAB
69 a:(1|2)d(3|4)
70 submodule/a:(1|2)d(3|4)
71 submodule/sub/a:(1|2)d(3|4)
0281e487
BW
72 EOF
73
5d52a30e 74 git grep -e "(3|4)" --and -e "(1|2)" --recurse-submodules >actual &&
0281e487
BW
75 test_cmp expect actual
76'
77
78test_expect_success 'grep and multiple patterns' '
79 cat >expect <<-\EOF &&
5d52a30e 80 b/b:(3|4)
0281e487
BW
81 EOF
82
5d52a30e 83 git grep -e "(3|4)" --and --not -e "(1|2)" --recurse-submodules >actual &&
0281e487
BW
84 test_cmp expect actual
85'
86
74ed4371
BW
87test_expect_success 'basic grep tree' '
88 cat >expect <<-\EOF &&
5d52a30e
ÆAB
89 HEAD:a:(1|2)d(3|4)
90 HEAD:b/b:(3|4)
91 HEAD:submodule/a:(1|2)d(3|4)
92 HEAD:submodule/sub/a:(1|2)d(3|4)
74ed4371
BW
93 EOF
94
5d52a30e 95 git grep -e "(3|4)" --recurse-submodules HEAD >actual &&
74ed4371
BW
96 test_cmp expect actual
97'
98
99test_expect_success 'grep tree HEAD^' '
100 cat >expect <<-\EOF &&
5d52a30e
ÆAB
101 HEAD^:a:(1|2)d(3|4)
102 HEAD^:b/b:(3|4)
103 HEAD^:submodule/a:(1|2)d(3|4)
74ed4371
BW
104 EOF
105
5d52a30e 106 git grep -e "(3|4)" --recurse-submodules HEAD^ >actual &&
74ed4371
BW
107 test_cmp expect actual
108'
109
110test_expect_success 'grep tree HEAD^^' '
111 cat >expect <<-\EOF &&
5d52a30e
ÆAB
112 HEAD^^:a:(1|2)d(3|4)
113 HEAD^^:b/b:(3|4)
74ed4371
BW
114 EOF
115
5d52a30e 116 git grep -e "(3|4)" --recurse-submodules HEAD^^ >actual &&
74ed4371
BW
117 test_cmp expect actual
118'
119
120test_expect_success 'grep tree and pathspecs' '
121 cat >expect <<-\EOF &&
5d52a30e
ÆAB
122 HEAD:submodule/a:(1|2)d(3|4)
123 HEAD:submodule/sub/a:(1|2)d(3|4)
74ed4371
BW
124 EOF
125
5d52a30e 126 git grep -e "(3|4)" --recurse-submodules HEAD -- submodule >actual &&
74ed4371
BW
127 test_cmp expect actual
128'
129
130test_expect_success 'grep tree and pathspecs' '
131 cat >expect <<-\EOF &&
5d52a30e
ÆAB
132 HEAD:submodule/a:(1|2)d(3|4)
133 HEAD:submodule/sub/a:(1|2)d(3|4)
74ed4371
BW
134 EOF
135
5d52a30e 136 git grep -e "(3|4)" --recurse-submodules HEAD -- "submodule*a" >actual &&
74ed4371
BW
137 test_cmp expect actual
138'
139
140test_expect_success 'grep tree and more pathspecs' '
141 cat >expect <<-\EOF &&
5d52a30e 142 HEAD:submodule/a:(1|2)d(3|4)
74ed4371
BW
143 EOF
144
5d52a30e 145 git grep -e "(3|4)" --recurse-submodules HEAD -- "submodul?/a" >actual &&
74ed4371
BW
146 test_cmp expect actual
147'
148
149test_expect_success 'grep tree and more pathspecs' '
150 cat >expect <<-\EOF &&
5d52a30e 151 HEAD:submodule/sub/a:(1|2)d(3|4)
74ed4371
BW
152 EOF
153
5d52a30e 154 git grep -e "(3|4)" --recurse-submodules HEAD -- "submodul*/sub/a" >actual &&
74ed4371
BW
155 test_cmp expect actual
156'
157
158test_expect_success !MINGW 'grep recurse submodule colon in name' '
159 git init parent &&
160 test_when_finished "rm -rf parent" &&
5d52a30e 161 echo "(1|2)d(3|4)" >"parent/fi:le" &&
74ed4371
BW
162 git -C parent add "fi:le" &&
163 git -C parent commit -m "add fi:le" &&
164
165 git init "su:b" &&
166 test_when_finished "rm -rf su:b" &&
5d52a30e 167 echo "(1|2)d(3|4)" >"su:b/fi:le" &&
74ed4371
BW
168 git -C "su:b" add "fi:le" &&
169 git -C "su:b" commit -m "add fi:le" &&
170
171 git -C parent submodule add "../su:b" "su:b" &&
172 git -C parent commit -m "add submodule" &&
173
174 cat >expect <<-\EOF &&
5d52a30e
ÆAB
175 fi:le:(1|2)d(3|4)
176 su:b/fi:le:(1|2)d(3|4)
74ed4371 177 EOF
5d52a30e 178 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
74ed4371
BW
179 test_cmp expect actual &&
180
181 cat >expect <<-\EOF &&
5d52a30e
ÆAB
182 HEAD:fi:le:(1|2)d(3|4)
183 HEAD:su:b/fi:le:(1|2)d(3|4)
74ed4371 184 EOF
5d52a30e 185 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules HEAD >actual &&
74ed4371
BW
186 test_cmp expect actual
187'
188
e6fac7f3
BW
189test_expect_success 'grep history with moved submoules' '
190 git init parent &&
191 test_when_finished "rm -rf parent" &&
5d52a30e 192 echo "(1|2)d(3|4)" >parent/file &&
e6fac7f3
BW
193 git -C parent add file &&
194 git -C parent commit -m "add file" &&
195
196 git init sub &&
197 test_when_finished "rm -rf sub" &&
5d52a30e 198 echo "(1|2)d(3|4)" >sub/file &&
e6fac7f3
BW
199 git -C sub add file &&
200 git -C sub commit -m "add file" &&
201
202 git -C parent submodule add ../sub dir/sub &&
203 git -C parent commit -m "add submodule" &&
204
205 cat >expect <<-\EOF &&
5d52a30e
ÆAB
206 dir/sub/file:(1|2)d(3|4)
207 file:(1|2)d(3|4)
e6fac7f3 208 EOF
5d52a30e 209 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
e6fac7f3
BW
210 test_cmp expect actual &&
211
212 git -C parent mv dir/sub sub-moved &&
213 git -C parent commit -m "moved submodule" &&
214
215 cat >expect <<-\EOF &&
5d52a30e
ÆAB
216 file:(1|2)d(3|4)
217 sub-moved/file:(1|2)d(3|4)
e6fac7f3 218 EOF
5d52a30e 219 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules >actual &&
e6fac7f3
BW
220 test_cmp expect actual &&
221
222 cat >expect <<-\EOF &&
5d52a30e
ÆAB
223 HEAD^:dir/sub/file:(1|2)d(3|4)
224 HEAD^:file:(1|2)d(3|4)
e6fac7f3 225 EOF
5d52a30e 226 git -C parent grep -e "(1|2)d(3|4)" --recurse-submodules HEAD^ >actual &&
e6fac7f3
BW
227 test_cmp expect actual
228'
229
be80a239
BW
230test_expect_success 'grep using relative path' '
231 test_when_finished "rm -rf parent sub" &&
232 git init sub &&
5d52a30e 233 echo "(1|2)d(3|4)" >sub/file &&
be80a239
BW
234 git -C sub add file &&
235 git -C sub commit -m "add file" &&
236
237 git init parent &&
5d52a30e 238 echo "(1|2)d(3|4)" >parent/file &&
be80a239
BW
239 git -C parent add file &&
240 mkdir parent/src &&
5d52a30e 241 echo "(1|2)d(3|4)" >parent/src/file2 &&
be80a239
BW
242 git -C parent add src/file2 &&
243 git -C parent submodule add ../sub &&
244 git -C parent commit -m "add files and submodule" &&
245
246 # From top works
247 cat >expect <<-\EOF &&
5d52a30e
ÆAB
248 file:(1|2)d(3|4)
249 src/file2:(1|2)d(3|4)
250 sub/file:(1|2)d(3|4)
be80a239 251 EOF
5d52a30e 252 git -C parent grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
be80a239
BW
253 test_cmp expect actual &&
254
255 # Relative path to top
256 cat >expect <<-\EOF &&
5d52a30e
ÆAB
257 ../file:(1|2)d(3|4)
258 file2:(1|2)d(3|4)
259 ../sub/file:(1|2)d(3|4)
be80a239 260 EOF
5d52a30e 261 git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" -- .. >actual &&
be80a239
BW
262 test_cmp expect actual &&
263
264 # Relative path to submodule
265 cat >expect <<-\EOF &&
5d52a30e 266 ../sub/file:(1|2)d(3|4)
be80a239 267 EOF
5d52a30e 268 git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" -- ../sub >actual &&
be80a239
BW
269 test_cmp expect actual
270'
271
272test_expect_success 'grep from a subdir' '
273 test_when_finished "rm -rf parent sub" &&
274 git init sub &&
5d52a30e 275 echo "(1|2)d(3|4)" >sub/file &&
be80a239
BW
276 git -C sub add file &&
277 git -C sub commit -m "add file" &&
278
279 git init parent &&
280 mkdir parent/src &&
5d52a30e 281 echo "(1|2)d(3|4)" >parent/src/file &&
be80a239
BW
282 git -C parent add src/file &&
283 git -C parent submodule add ../sub src/sub &&
284 git -C parent submodule add ../sub sub &&
285 git -C parent commit -m "add files and submodules" &&
286
287 # Verify grep from root works
288 cat >expect <<-\EOF &&
5d52a30e
ÆAB
289 src/file:(1|2)d(3|4)
290 src/sub/file:(1|2)d(3|4)
291 sub/file:(1|2)d(3|4)
be80a239 292 EOF
5d52a30e 293 git -C parent grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
be80a239
BW
294 test_cmp expect actual &&
295
296 # Verify grep from a subdir works
297 cat >expect <<-\EOF &&
5d52a30e
ÆAB
298 file:(1|2)d(3|4)
299 sub/file:(1|2)d(3|4)
be80a239 300 EOF
5d52a30e 301 git -C parent/src grep --recurse-submodules -e "(1|2)d(3|4)" >actual &&
be80a239
BW
302 test_cmp expect actual
303'
304
0281e487
BW
305test_incompatible_with_recurse_submodules ()
306{
307 test_expect_success "--recurse-submodules and $1 are incompatible" "
308 test_must_fail git grep -e. --recurse-submodules $1 2>actual &&
309 test_i18ngrep 'not supported with --recurse-submodules' actual
310 "
311}
312
313test_incompatible_with_recurse_submodules --untracked
314test_incompatible_with_recurse_submodules --no-index
0281e487
BW
315
316test_done