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 submodule absorbgitdirs &&
81git ls-files --recurse-submodules >actual &&
82test_cmp expect actual
83'
8485
test_expect_success '--recurse-submodules and pathspecs setup' '
86echo e >submodule/subsub/e.txt &&
87git -C submodule/subsub add e.txt &&
88git -C submodule/subsub commit -m "adding e.txt" &&
89echo f >submodule/f.TXT &&
90echo g >submodule/g.txt &&
91git -C submodule add f.TXT g.txt &&
92git -C submodule commit -m "add f and g" &&
93echo h >h.txt &&
94mkdir sib &&
95echo sib >sib/file &&
96git add h.txt sib/file &&
97git commit -m "add h and sib/file" &&
98git init sub &&
99echo sub >sub/file &&
100git -C sub add file &&
101git -C sub commit -m "add file" &&
102git submodule add ./sub &&
103git commit -m "added sub" &&
104105
cat >expect <<-\EOF &&
106.gitmodules
107a
108b/b
109h.txt
110sib/file
111sub/file
112submodule/.gitmodules
113submodule/c
114submodule/f.TXT
115submodule/g.txt
116submodule/subsub/d
117submodule/subsub/e.txt
118EOF
119120
git ls-files --recurse-submodules >actual &&
121test_cmp expect actual &&
122cat actual &&
123git ls-files --recurse-submodules "*" >actual &&
124test_cmp expect actual
125'
126127
test_expect_success '--recurse-submodules and pathspecs' '
128cat >expect <<-\EOF &&
129h.txt
130submodule/g.txt
131submodule/subsub/e.txt
132EOF
133134
git ls-files --recurse-submodules "*.txt" >actual &&
135test_cmp expect actual
136'
137138
test_expect_success '--recurse-submodules and pathspecs' '
139cat >expect <<-\EOF &&
140h.txt
141submodule/f.TXT
142submodule/g.txt
143submodule/subsub/e.txt
144EOF
145146
git ls-files --recurse-submodules ":(icase)*.txt" >actual &&
147test_cmp expect actual
148'
149150
test_expect_success '--recurse-submodules and pathspecs' '
151cat >expect <<-\EOF &&
152h.txt
153submodule/f.TXT
154submodule/g.txt
155EOF
156157
git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual &&
158test_cmp expect actual
159'
160161
test_expect_success '--recurse-submodules and pathspecs' '
162cat >expect <<-\EOF &&
163sub/file
164EOF
165166
git ls-files --recurse-submodules "sub" >actual &&
167test_cmp expect actual &&
168git ls-files --recurse-submodules "sub/" >actual &&
169test_cmp expect actual &&
170git ls-files --recurse-submodules "sub/file" >actual &&
171test_cmp expect actual &&
172git ls-files --recurse-submodules "su*/file" >actual &&
173test_cmp expect actual &&
174git ls-files --recurse-submodules "su?/file" >actual &&
175test_cmp expect actual
176'
177178
test_expect_success '--recurse-submodules and pathspecs' '
179cat >expect <<-\EOF &&
180sib/file
181sub/file
182EOF
183184
git ls-files --recurse-submodules "s??/file" >actual &&
185test_cmp expect actual &&
186git ls-files --recurse-submodules "s???file" >actual &&
187test_cmp expect actual &&
188git ls-files --recurse-submodules "s*file" >actual &&
189test_cmp expect actual
190'
191192
test_expect_success '--recurse-submodules and relative paths' '
193# From subdir
194cat >expect <<-\EOF &&
195b
196EOF
197git -C b ls-files --recurse-submodules >actual &&
198test_cmp expect actual &&
199200
# Relative path to top
201cat >expect <<-\EOF &&
202../.gitmodules
203../a
204b
205../h.txt
206../sib/file
207../sub/file
208../submodule/.gitmodules
209../submodule/c
210../submodule/f.TXT
211../submodule/g.txt
212../submodule/subsub/d
213../submodule/subsub/e.txt
214EOF
215git -C b ls-files --recurse-submodules -- .. >actual &&
216test_cmp expect actual &&
217218
# Relative path to submodule
219cat >expect <<-\EOF &&
220../submodule/.gitmodules
221../submodule/c
222../submodule/f.TXT
223../submodule/g.txt
224../submodule/subsub/d
225../submodule/subsub/e.txt
226EOF
227git -C b ls-files --recurse-submodules -- ../submodule >actual &&
228test_cmp expect actual
229'
230231
test_expect_success '--recurse-submodules does not support --error-unmatch' '
232test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&
233test_i18ngrep "does not support --error-unmatch" actual
234'
235236
test_incompatible_with_recurse_submodules () {
237test_expect_success "--recurse-submodules and $1 are incompatible" "
238test_must_fail git ls-files --recurse-submodules $1 2>actual &&
239test_i18ngrep 'unsupported mode' actual
240"
241}
242243
test_incompatible_with_recurse_submodules --deleted
244test_incompatible_with_recurse_submodules --modified
245test_incompatible_with_recurse_submodules --others
246test_incompatible_with_recurse_submodules --stage
247test_incompatible_with_recurse_submodules --killed
248test_incompatible_with_recurse_submodules --unmerged
249250
test_done