]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3011-common-prefixes-and-directory-traversal.sh
mailinfo: factor out some repeated header handling
[thirdparty/git.git] / t / t3011-common-prefixes-and-directory-traversal.sh
CommitLineData
452efd11
EN
1#!/bin/sh
2
3test_description='directory traversal handling, especially with common prefixes'
4
5. ./test-lib.sh
6
7test_expect_success 'setup' '
8 test_commit hello &&
9
10 >empty &&
11 mkdir untracked_dir &&
12 >untracked_dir/empty &&
13 git init untracked_repo &&
14 >untracked_repo/empty &&
15
16 cat <<-EOF >.gitignore &&
17 ignored
18 an_ignored_dir/
19 EOF
20 mkdir an_ignored_dir &&
21 mkdir an_untracked_dir &&
22 >an_ignored_dir/ignored &&
23 >an_ignored_dir/untracked &&
24 >an_untracked_dir/ignored &&
25 >an_untracked_dir/untracked
26'
27
28test_expect_success 'git ls-files -o shows the right entries' '
29 cat <<-EOF >expect &&
30 .gitignore
31 actual
32 an_ignored_dir/ignored
33 an_ignored_dir/untracked
34 an_untracked_dir/ignored
35 an_untracked_dir/untracked
36 empty
37 expect
38 untracked_dir/empty
39 untracked_repo/
40 EOF
41 git ls-files -o >actual &&
42 test_cmp expect actual
43'
44
45test_expect_success 'git ls-files -o --exclude-standard shows the right entries' '
46 cat <<-EOF >expect &&
47 .gitignore
48 actual
49 an_untracked_dir/untracked
50 empty
51 expect
52 untracked_dir/empty
53 untracked_repo/
54 EOF
55 git ls-files -o --exclude-standard >actual &&
56 test_cmp expect actual
57'
58
59test_expect_success 'git ls-files -o untracked_dir recurses' '
60 echo untracked_dir/empty >expect &&
61 git ls-files -o untracked_dir >actual &&
62 test_cmp expect actual
63'
64
65test_expect_success 'git ls-files -o untracked_dir/ recurses' '
66 echo untracked_dir/empty >expect &&
67 git ls-files -o untracked_dir/ >actual &&
68 test_cmp expect actual
69'
70
71test_expect_success 'git ls-files -o --directory untracked_dir does not recurse' '
72 echo untracked_dir/ >expect &&
73 git ls-files -o --directory untracked_dir >actual &&
74 test_cmp expect actual
75'
76
b9670c1f 77test_expect_success 'git ls-files -o --directory untracked_dir/ does not recurse' '
452efd11
EN
78 echo untracked_dir/ >expect &&
79 git ls-files -o --directory untracked_dir/ >actual &&
80 test_cmp expect actual
81'
82
83test_expect_success 'git ls-files -o untracked_repo does not recurse' '
84 echo untracked_repo/ >expect &&
85 git ls-files -o untracked_repo >actual &&
86 test_cmp expect actual
87'
88
b9670c1f 89test_expect_success 'git ls-files -o untracked_repo/ does not recurse' '
452efd11
EN
90 echo untracked_repo/ >expect &&
91 git ls-files -o untracked_repo/ >actual &&
92 test_cmp expect actual
93'
94
072a2310 95test_expect_success 'git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only' '
452efd11
EN
96 cat <<-EOF >expect &&
97 untracked_dir/empty
98 untracked_repo/
99 EOF
100 git ls-files -o untracked_dir untracked_repo >actual &&
101 test_cmp expect actual
102'
103
104test_expect_success 'git ls-files -o untracked_dir/ untracked_repo/ recurses into untracked_dir only' '
105 cat <<-EOF >expect &&
106 untracked_dir/empty
107 untracked_repo/
108 EOF
109 git ls-files -o untracked_dir/ untracked_repo/ >actual &&
110 test_cmp expect actual
111'
112
072a2310 113test_expect_success 'git ls-files -o --directory untracked_dir untracked_repo does not recurse' '
452efd11
EN
114 cat <<-EOF >expect &&
115 untracked_dir/
116 untracked_repo/
117 EOF
118 git ls-files -o --directory untracked_dir untracked_repo >actual &&
119 test_cmp expect actual
120'
121
122test_expect_success 'git ls-files -o --directory untracked_dir/ untracked_repo/ does not recurse' '
123 cat <<-EOF >expect &&
124 untracked_dir/
125 untracked_repo/
126 EOF
127 git ls-files -o --directory untracked_dir/ untracked_repo/ >actual &&
128 test_cmp expect actual
129'
130
131test_expect_success 'git ls-files -o .git shows nothing' '
132 git ls-files -o .git >actual &&
133 test_must_be_empty actual
134'
135
b9670c1f 136test_expect_success 'git ls-files -o .git/ shows nothing' '
452efd11
EN
137 git ls-files -o .git/ >actual &&
138 test_must_be_empty actual
139'
140
141test_expect_success FUNNYNAMES 'git ls-files -o untracked_* recurses appropriately' '
142 mkdir "untracked_*" &&
143 >"untracked_*/empty" &&
144
145 cat <<-EOF >expect &&
146 untracked_*/empty
147 untracked_dir/empty
148 untracked_repo/
149 EOF
150 git ls-files -o "untracked_*" >actual &&
151 test_cmp expect actual
152'
153
154# It turns out fill_directory returns the right paths, but ls-files' post-call
155# filtering in show_dir_entry() via calling dir_path_match() which ends up
156# in git_fnmatch() has logic for PATHSPEC_ONESTAR that assumes the pathspec
157# must match the full path; it doesn't check it for matching a leading
158# directory.
159test_expect_failure FUNNYNAMES 'git ls-files -o untracked_*/ recurses appropriately' '
160 cat <<-EOF >expect &&
161 untracked_*/empty
162 untracked_dir/empty
163 untracked_repo/
164 EOF
165 git ls-files -o "untracked_*/" >actual &&
166 test_cmp expect actual
167'
168
169test_expect_success FUNNYNAMES 'git ls-files -o --directory untracked_* does not recurse' '
170 cat <<-EOF >expect &&
171 untracked_*/
172 untracked_dir/
173 untracked_repo/
174 EOF
175 git ls-files -o --directory "untracked_*" >actual &&
176 test_cmp expect actual
177'
178
179test_expect_success FUNNYNAMES 'git ls-files -o --directory untracked_*/ does not recurse' '
180 cat <<-EOF >expect &&
181 untracked_*/
182 untracked_dir/
183 untracked_repo/
184 EOF
185 git ls-files -o --directory "untracked_*/" >actual &&
186 test_cmp expect actual
187'
188
189test_expect_success 'git ls-files -o consistent between one or two dirs' '
190 git ls-files -o --exclude-standard an_ignored_dir/ an_untracked_dir/ >tmp &&
191 ! grep ^an_ignored_dir/ tmp >expect &&
192 git ls-files -o --exclude-standard an_ignored_dir/ >actual &&
193 test_cmp expect actual
194'
195
196# ls-files doesn't have a way to request showing both untracked and ignored
197# files at the same time, so use `git status --ignored`
777b4203 198test_expect_success 'git status --ignored shows same files under dir with or without pathspec' '
452efd11
EN
199 cat <<-EOF >expect &&
200 ?? an_untracked_dir/
201 !! an_untracked_dir/ignored
202 EOF
203 git status --porcelain --ignored >output &&
204 grep an_untracked_dir output >expect &&
205 git status --porcelain --ignored an_untracked_dir/ >actual &&
206 test_cmp expect actual
207'
208
209test_done