]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3007-ls-files-recurse-submodules.sh
path.c: don't call the match function without value in trie_find()
[thirdparty/git.git] / t / t3007-ls-files-recurse-submodules.sh
CommitLineData
e77aa336
BW
1#!/bin/sh
2
3test_description='Test ls-files recurse-submodules feature
4
5This test verifies the recurse-submodules feature correctly lists files from
6submodules.
7'
8
9. ./test-lib.sh
10
11test_expect_success 'setup directory structure and submodules' '
12 echo a >a &&
13 mkdir b &&
14 echo b >b/b &&
15 git add a b &&
16 git commit -m "add a and b" &&
17 git init submodule &&
18 echo c >submodule/c &&
19 git -C submodule add c &&
20 git -C submodule commit -m "add c" &&
21 git submodule add ./submodule &&
22 git commit -m "added submodule"
23'
24
25test_expect_success 'ls-files correctly outputs files in submodule' '
26 cat >expect <<-\EOF &&
27 .gitmodules
28 a
29 b/b
30 submodule/c
31 EOF
32
33 git ls-files --recurse-submodules >actual &&
34 test_cmp expect actual
35'
36
07c01b9f
BW
37test_expect_success 'ls-files correctly outputs files in submodule with -z' '
38 lf_to_nul >expect <<-\EOF &&
39 .gitmodules
40 a
41 b/b
42 submodule/c
43 EOF
44
45 git ls-files --recurse-submodules -z >actual &&
46 test_cmp expect actual
47'
48
e77aa336
BW
49test_expect_success 'ls-files does not output files not added to a repo' '
50 cat >expect <<-\EOF &&
51 .gitmodules
52 a
53 b/b
54 submodule/c
55 EOF
56
57 echo a >not_added &&
58 echo b >b/not_added &&
59 echo c >submodule/not_added &&
60 git ls-files --recurse-submodules >actual &&
61 test_cmp expect actual
62'
63
64test_expect_success 'ls-files recurses more than 1 level' '
65 cat >expect <<-\EOF &&
66 .gitmodules
67 a
68 b/b
69 submodule/.gitmodules
70 submodule/c
71 submodule/subsub/d
72 EOF
73
74 git init submodule/subsub &&
75 echo d >submodule/subsub/d &&
76 git -C submodule/subsub add d &&
77 git -C submodule/subsub commit -m "add d" &&
78 git -C submodule submodule add ./subsub &&
79 git -C submodule commit -m "added subsub" &&
2e5d6503 80 git submodule absorbgitdirs &&
e77aa336
BW
81 git ls-files --recurse-submodules >actual &&
82 test_cmp expect actual
83'
84
2cfe66a8
JK
85test_expect_success 'ls-files works with GIT_DIR' '
86 cat >expect <<-\EOF &&
87 .gitmodules
88 c
89 subsub/d
90 EOF
91
92 git --git-dir=submodule/.git ls-files --recurse-submodules >actual &&
93 test_cmp expect actual
94'
95
75a6315f
BW
96test_expect_success '--recurse-submodules and pathspecs setup' '
97 echo e >submodule/subsub/e.txt &&
98 git -C submodule/subsub add e.txt &&
99 git -C submodule/subsub commit -m "adding e.txt" &&
100 echo f >submodule/f.TXT &&
101 echo g >submodule/g.txt &&
102 git -C submodule add f.TXT g.txt &&
103 git -C submodule commit -m "add f and g" &&
104 echo h >h.txt &&
105 mkdir sib &&
106 echo sib >sib/file &&
107 git add h.txt sib/file &&
108 git commit -m "add h and sib/file" &&
109 git init sub &&
110 echo sub >sub/file &&
111 git -C sub add file &&
112 git -C sub commit -m "add file" &&
113 git submodule add ./sub &&
114 git commit -m "added sub" &&
115
116 cat >expect <<-\EOF &&
117 .gitmodules
118 a
119 b/b
120 h.txt
121 sib/file
122 sub/file
123 submodule/.gitmodules
124 submodule/c
125 submodule/f.TXT
126 submodule/g.txt
127 submodule/subsub/d
128 submodule/subsub/e.txt
129 EOF
130
131 git ls-files --recurse-submodules >actual &&
132 test_cmp expect actual &&
133 cat actual &&
134 git ls-files --recurse-submodules "*" >actual &&
135 test_cmp expect actual
136'
137
188dce13
BW
138test_expect_success 'inactive submodule' '
139 test_when_finished "git config --bool submodule.submodule.active true" &&
140 test_when_finished "git -C submodule config --bool submodule.subsub.active true" &&
141 git config --bool submodule.submodule.active "false" &&
142
143 cat >expect <<-\EOF &&
144 .gitmodules
145 a
146 b/b
147 h.txt
148 sib/file
149 sub/file
150 submodule
151 EOF
152
153 git ls-files --recurse-submodules >actual &&
154 test_cmp expect actual &&
155
156 git config --bool submodule.submodule.active "true" &&
157 git -C submodule config --bool submodule.subsub.active "false" &&
158
159 cat >expect <<-\EOF &&
160 .gitmodules
161 a
162 b/b
163 h.txt
164 sib/file
165 sub/file
166 submodule/.gitmodules
167 submodule/c
168 submodule/f.TXT
169 submodule/g.txt
170 submodule/subsub
171 EOF
172
173 git ls-files --recurse-submodules >actual &&
174 test_cmp expect actual
175'
176
75a6315f
BW
177test_expect_success '--recurse-submodules and pathspecs' '
178 cat >expect <<-\EOF &&
179 h.txt
180 submodule/g.txt
181 submodule/subsub/e.txt
182 EOF
183
184 git ls-files --recurse-submodules "*.txt" >actual &&
185 test_cmp expect actual
186'
187
188test_expect_success '--recurse-submodules and pathspecs' '
189 cat >expect <<-\EOF &&
190 h.txt
191 submodule/f.TXT
192 submodule/g.txt
193 submodule/subsub/e.txt
194 EOF
195
196 git ls-files --recurse-submodules ":(icase)*.txt" >actual &&
197 test_cmp expect actual
198'
199
200test_expect_success '--recurse-submodules and pathspecs' '
201 cat >expect <<-\EOF &&
202 h.txt
203 submodule/f.TXT
204 submodule/g.txt
205 EOF
206
207 git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual &&
208 test_cmp expect actual
209'
210
211test_expect_success '--recurse-submodules and pathspecs' '
212 cat >expect <<-\EOF &&
213 sub/file
214 EOF
215
216 git ls-files --recurse-submodules "sub" >actual &&
217 test_cmp expect actual &&
218 git ls-files --recurse-submodules "sub/" >actual &&
219 test_cmp expect actual &&
220 git ls-files --recurse-submodules "sub/file" >actual &&
221 test_cmp expect actual &&
222 git ls-files --recurse-submodules "su*/file" >actual &&
223 test_cmp expect actual &&
224 git ls-files --recurse-submodules "su?/file" >actual &&
225 test_cmp expect actual
226'
227
228test_expect_success '--recurse-submodules and pathspecs' '
229 cat >expect <<-\EOF &&
230 sib/file
231 sub/file
232 EOF
233
234 git ls-files --recurse-submodules "s??/file" >actual &&
235 test_cmp expect actual &&
236 git ls-files --recurse-submodules "s???file" >actual &&
237 test_cmp expect actual &&
238 git ls-files --recurse-submodules "s*file" >actual &&
239 test_cmp expect actual
e77aa336
BW
240'
241
b2dfeb7c
BW
242test_expect_success '--recurse-submodules and relative paths' '
243 # From subdir
244 cat >expect <<-\EOF &&
245 b
246 EOF
247 git -C b ls-files --recurse-submodules >actual &&
248 test_cmp expect actual &&
249
250 # Relative path to top
251 cat >expect <<-\EOF &&
252 ../.gitmodules
253 ../a
254 b
255 ../h.txt
256 ../sib/file
257 ../sub/file
258 ../submodule/.gitmodules
259 ../submodule/c
260 ../submodule/f.TXT
261 ../submodule/g.txt
262 ../submodule/subsub/d
263 ../submodule/subsub/e.txt
264 EOF
265 git -C b ls-files --recurse-submodules -- .. >actual &&
266 test_cmp expect actual &&
267
268 # Relative path to submodule
269 cat >expect <<-\EOF &&
270 ../submodule/.gitmodules
271 ../submodule/c
272 ../submodule/f.TXT
273 ../submodule/g.txt
274 ../submodule/subsub/d
275 ../submodule/subsub/e.txt
276 EOF
277 git -C b ls-files --recurse-submodules -- ../submodule >actual &&
278 test_cmp expect actual
279'
280
e77aa336
BW
281test_expect_success '--recurse-submodules does not support --error-unmatch' '
282 test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&
283 test_i18ngrep "does not support --error-unmatch" actual
284'
285
286test_incompatible_with_recurse_submodules () {
287 test_expect_success "--recurse-submodules and $1 are incompatible" "
288 test_must_fail git ls-files --recurse-submodules $1 2>actual &&
289 test_i18ngrep 'unsupported mode' actual
290 "
291}
292
e77aa336
BW
293test_incompatible_with_recurse_submodules --deleted
294test_incompatible_with_recurse_submodules --modified
295test_incompatible_with_recurse_submodules --others
296test_incompatible_with_recurse_submodules --stage
297test_incompatible_with_recurse_submodules --killed
298test_incompatible_with_recurse_submodules --unmerged
e77aa336
BW
299
300test_done