string-list.[ch]: add a string_list_init_{nodup,dup}()
[git.git] / t / t3007-ls-files-recurse-submodules.sh
blob4a080007137926b5dcc84ee80856bcbcfc71340f
1 #!/bin/sh
3 test_description='Test ls-files recurse-submodules feature
5 This test verifies the recurse-submodules feature correctly lists files from
6 submodules.
9 . ./test-lib.sh
11 test_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"
25 test_expect_success 'ls-files correctly outputs files in submodule' '
26 cat >expect <<-\EOF &&
27 .gitmodules
29 b/b
30 submodule/c
31 EOF
33 git ls-files --recurse-submodules >actual &&
34 test_cmp expect actual
37 test_expect_success 'ls-files correctly outputs files in submodule with -z' '
38 lf_to_nul >expect <<-\EOF &&
39 .gitmodules
41 b/b
42 submodule/c
43 EOF
45 git ls-files --recurse-submodules -z >actual &&
46 test_cmp expect actual
49 test_expect_success 'ls-files does not output files not added to a repo' '
50 cat >expect <<-\EOF &&
51 .gitmodules
53 b/b
54 submodule/c
55 EOF
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
64 test_expect_success 'ls-files recurses more than 1 level' '
65 cat >expect <<-\EOF &&
66 .gitmodules
68 b/b
69 submodule/.gitmodules
70 submodule/c
71 submodule/subsub/d
72 EOF
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" &&
80 git submodule absorbgitdirs &&
81 git ls-files --recurse-submodules >actual &&
82 test_cmp expect actual
85 test_expect_success 'ls-files works with GIT_DIR' '
86 cat >expect <<-\EOF &&
87 .gitmodules
89 subsub/d
90 EOF
92 git --git-dir=submodule/.git ls-files --recurse-submodules >actual &&
93 test_cmp expect actual
96 test_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" &&
116 cat >expect <<-\EOF &&
117 .gitmodules
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
131 git ls-files --recurse-submodules >actual &&
132 test_cmp expect actual &&
133 git ls-files --recurse-submodules "*" >actual &&
134 test_cmp expect actual
137 test_expect_success 'inactive submodule' '
138 test_when_finished "git config --bool submodule.submodule.active true" &&
139 test_when_finished "git -C submodule config --bool submodule.subsub.active true" &&
140 git config --bool submodule.submodule.active "false" &&
142 cat >expect <<-\EOF &&
143 .gitmodules
146 h.txt
147 sib/file
148 sub/file
149 submodule
152 git ls-files --recurse-submodules >actual &&
153 test_cmp expect actual &&
155 git config --bool submodule.submodule.active "true" &&
156 git -C submodule config --bool submodule.subsub.active "false" &&
158 cat >expect <<-\EOF &&
159 .gitmodules
162 h.txt
163 sib/file
164 sub/file
165 submodule/.gitmodules
166 submodule/c
167 submodule/f.TXT
168 submodule/g.txt
169 submodule/subsub
172 git ls-files --recurse-submodules >actual &&
173 test_cmp expect actual
176 test_expect_success '--recurse-submodules and pathspecs' '
177 cat >expect <<-\EOF &&
178 h.txt
179 submodule/g.txt
180 submodule/subsub/e.txt
183 git ls-files --recurse-submodules "*.txt" >actual &&
184 test_cmp expect actual
187 test_expect_success '--recurse-submodules and pathspecs' '
188 cat >expect <<-\EOF &&
189 h.txt
190 submodule/f.TXT
191 submodule/g.txt
192 submodule/subsub/e.txt
195 git ls-files --recurse-submodules ":(icase)*.txt" >actual &&
196 test_cmp expect actual
199 test_expect_success '--recurse-submodules and pathspecs' '
200 cat >expect <<-\EOF &&
201 h.txt
202 submodule/f.TXT
203 submodule/g.txt
206 git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual &&
207 test_cmp expect actual
210 test_expect_success '--recurse-submodules and pathspecs' '
211 cat >expect <<-\EOF &&
212 sub/file
215 git ls-files --recurse-submodules "sub" >actual &&
216 test_cmp expect actual &&
217 git ls-files --recurse-submodules "sub/" >actual &&
218 test_cmp expect actual &&
219 git ls-files --recurse-submodules "sub/file" >actual &&
220 test_cmp expect actual &&
221 git ls-files --recurse-submodules "su*/file" >actual &&
222 test_cmp expect actual &&
223 git ls-files --recurse-submodules "su?/file" >actual &&
224 test_cmp expect actual
227 test_expect_success '--recurse-submodules and pathspecs' '
228 cat >expect <<-\EOF &&
229 sib/file
230 sub/file
233 git ls-files --recurse-submodules "s??/file" >actual &&
234 test_cmp expect actual &&
235 git ls-files --recurse-submodules "s???file" >actual &&
236 test_cmp expect actual &&
237 git ls-files --recurse-submodules "s*file" >actual &&
238 test_cmp expect actual
241 test_expect_success '--recurse-submodules and relative paths' '
242 # From subdir
243 cat >expect <<-\EOF &&
246 git -C b ls-files --recurse-submodules >actual &&
247 test_cmp expect actual &&
249 # Relative path to top
250 cat >expect <<-\EOF &&
251 ../.gitmodules
252 ../a
254 ../h.txt
255 ../sib/file
256 ../sub/file
257 ../submodule/.gitmodules
258 ../submodule/c
259 ../submodule/f.TXT
260 ../submodule/g.txt
261 ../submodule/subsub/d
262 ../submodule/subsub/e.txt
264 git -C b ls-files --recurse-submodules -- .. >actual &&
265 test_cmp expect actual &&
267 # Relative path to submodule
268 cat >expect <<-\EOF &&
269 ../submodule/.gitmodules
270 ../submodule/c
271 ../submodule/f.TXT
272 ../submodule/g.txt
273 ../submodule/subsub/d
274 ../submodule/subsub/e.txt
276 git -C b ls-files --recurse-submodules -- ../submodule >actual &&
277 test_cmp expect actual
280 test_expect_success '--recurse-submodules does not support --error-unmatch' '
281 test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&
282 test_i18ngrep "does not support --error-unmatch" actual
285 test_incompatible_with_recurse_submodules () {
286 test_expect_success "--recurse-submodules and $1 are incompatible" "
287 test_must_fail git ls-files --recurse-submodules $1 2>actual &&
288 test_i18ngrep 'unsupported mode' actual
292 test_incompatible_with_recurse_submodules --deleted
293 test_incompatible_with_recurse_submodules --modified
294 test_incompatible_with_recurse_submodules --others
295 test_incompatible_with_recurse_submodules --stage
296 test_incompatible_with_recurse_submodules --killed
297 test_incompatible_with_recurse_submodules --unmerged
299 test_done