1#!/bin/sh
23
test_description='Test ls-files recurse-submodules feature
45
This test verifies the recurse-submodules feature correctly lists files from
6submodules.
7'
89
. ./test-lib.sh
1011
test_expect_success 'setup directory structure and submodules' '
12echo a >a &&
13mkdir b &&
14echo b >b/b &&
15git add a b &&
16git commit -m "add a and b" &&
17git init submodule &&
18echo c >submodule/c &&
19git -C submodule add c &&
20git -C submodule commit -m "add c" &&
21git submodule add ./submodule &&
22git commit -m "added submodule"
23'
2425
test_expect_success 'ls-files correctly outputs files in submodule' '
26cat >expect <<-\EOF &&
27.gitmodules
28a
29b/b
30submodule/c
31EOF
3233
git ls-files --recurse-submodules >actual &&
34test_cmp expect actual
35'
3637
test_expect_success 'ls-files correctly outputs files in submodule with -z' '
38lf_to_nul >expect <<-\EOF &&
39.gitmodules
40a
41b/b
42submodule/c
43EOF
4445
git ls-files --recurse-submodules -z >actual &&
46test_cmp expect actual
47'
4849
test_expect_success 'ls-files does not output files not added to a repo' '
50cat >expect <<-\EOF &&
51.gitmodules
52a
53b/b
54submodule/c
55EOF
5657
echo a >not_added &&
58echo b >b/not_added &&
59echo c >submodule/not_added &&
60git ls-files --recurse-submodules >actual &&
61test_cmp expect actual
62'
6364
test_expect_success 'ls-files recurses more than 1 level' '
65cat >expect <<-\EOF &&
66.gitmodules
67a
68b/b
69submodule/.gitmodules
70submodule/c
71submodule/subsub/d
72EOF
7374
git init submodule/subsub &&
75echo d >submodule/subsub/d &&
76git -C submodule/subsub add d &&
77git -C submodule/subsub commit -m "add d" &&
78git -C submodule submodule add ./subsub &&
79git -C submodule commit -m "added subsub" &&
80git ls-files --recurse-submodules >actual &&
81test_cmp expect actual
82'
8384
test_expect_success '--recurse-submodules and pathspecs setup' '
85echo e >submodule/subsub/e.txt &&
86git -C submodule/subsub add e.txt &&
87git -C submodule/subsub commit -m "adding e.txt" &&
88echo f >submodule/f.TXT &&
89echo g >submodule/g.txt &&
90git -C submodule add f.TXT g.txt &&
91git -C submodule commit -m "add f and g" &&
92echo h >h.txt &&
93mkdir sib &&
94echo sib >sib/file &&
95git add h.txt sib/file &&
96git commit -m "add h and sib/file" &&
97git init sub &&
98echo sub >sub/file &&
99git -C sub add file &&
100git -C sub commit -m "add file" &&
101git submodule add ./sub &&
102git commit -m "added sub" &&
103104
cat >expect <<-\EOF &&
105.gitmodules
106a
107b/b
108h.txt
109sib/file
110sub/file
111submodule/.gitmodules
112submodule/c
113submodule/f.TXT
114submodule/g.txt
115submodule/subsub/d
116submodule/subsub/e.txt
117EOF
118119
git ls-files --recurse-submodules >actual &&
120test_cmp expect actual &&
121cat actual &&
122git ls-files --recurse-submodules "*" >actual &&
123test_cmp expect actual
124'
125126
test_expect_success '--recurse-submodules and pathspecs' '
127cat >expect <<-\EOF &&
128h.txt
129submodule/g.txt
130submodule/subsub/e.txt
131EOF
132133
git ls-files --recurse-submodules "*.txt" >actual &&
134test_cmp expect actual
135'
136137
test_expect_success '--recurse-submodules and pathspecs' '
138cat >expect <<-\EOF &&
139h.txt
140submodule/f.TXT
141submodule/g.txt
142submodule/subsub/e.txt
143EOF
144145
git ls-files --recurse-submodules ":(icase)*.txt" >actual &&
146test_cmp expect actual
147'
148149
test_expect_success '--recurse-submodules and pathspecs' '
150cat >expect <<-\EOF &&
151h.txt
152submodule/f.TXT
153submodule/g.txt
154EOF
155156
git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual &&
157test_cmp expect actual
158'
159160
test_expect_success '--recurse-submodules and pathspecs' '
161cat >expect <<-\EOF &&
162sub/file
163EOF
164165
git ls-files --recurse-submodules "sub" >actual &&
166test_cmp expect actual &&
167git ls-files --recurse-submodules "sub/" >actual &&
168test_cmp expect actual &&
169git ls-files --recurse-submodules "sub/file" >actual &&
170test_cmp expect actual &&
171git ls-files --recurse-submodules "su*/file" >actual &&
172test_cmp expect actual &&
173git ls-files --recurse-submodules "su?/file" >actual &&
174test_cmp expect actual
175'
176177
test_expect_success '--recurse-submodules and pathspecs' '
178cat >expect <<-\EOF &&
179sib/file
180sub/file
181EOF
182183
git ls-files --recurse-submodules "s??/file" >actual &&
184test_cmp expect actual &&
185git ls-files --recurse-submodules "s???file" >actual &&
186test_cmp expect actual &&
187git ls-files --recurse-submodules "s*file" >actual &&
188test_cmp expect actual
189'
190191
test_expect_success '--recurse-submodules and relative paths' '
192# From subdir
193cat >expect <<-\EOF &&
194b
195EOF
196git -C b ls-files --recurse-submodules >actual &&
197test_cmp expect actual &&
198199
# Relative path to top
200cat >expect <<-\EOF &&
201../.gitmodules
202../a
203b
204../h.txt
205../sib/file
206../sub/file
207../submodule/.gitmodules
208../submodule/c
209../submodule/f.TXT
210../submodule/g.txt
211../submodule/subsub/d
212../submodule/subsub/e.txt
213EOF
214git -C b ls-files --recurse-submodules -- .. >actual &&
215test_cmp expect actual &&
216217
# Relative path to submodule
218cat >expect <<-\EOF &&
219../submodule/.gitmodules
220../submodule/c
221../submodule/f.TXT
222../submodule/g.txt
223../submodule/subsub/d
224../submodule/subsub/e.txt
225EOF
226git -C b ls-files --recurse-submodules -- ../submodule >actual &&
227test_cmp expect actual
228'
229230
test_expect_success '--recurse-submodules does not support --error-unmatch' '
231test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&
232test_i18ngrep "does not support --error-unmatch" actual
233'
234235
test_incompatible_with_recurse_submodules () {
236test_expect_success "--recurse-submodules and $1 are incompatible" "
237test_must_fail git ls-files --recurse-submodules $1 2>actual &&
238test_i18ngrep 'unsupported mode' actual
239"
240}
241242
test_incompatible_with_recurse_submodules --deleted
243test_incompatible_with_recurse_submodules --modified
244test_incompatible_with_recurse_submodules --others
245test_incompatible_with_recurse_submodules --stage
246test_incompatible_with_recurse_submodules --killed
247test_incompatible_with_recurse_submodules --unmerged
248249
test_done