Merge branch 'js/diff-files-i-t-a-fix-for-difftool'
[git] / t / t6132-pathspec-exclude.sh
1 #!/bin/sh
2
3 test_description='test case exclude pathspec'
4
5 . ./test-lib.sh
6
7 test_expect_success 'setup' '
8         for p in file sub/file sub/sub/file sub/file2 sub/sub/sub/file sub2/file; do
9                 if echo $p | grep /; then
10                         mkdir -p $(dirname $p)
11                 fi &&
12                 : >$p &&
13                 git add $p &&
14                 git commit -m $p
15         done &&
16         git log --oneline --format=%s >actual &&
17         cat <<EOF >expect &&
18 sub2/file
19 sub/sub/sub/file
20 sub/file2
21 sub/sub/file
22 sub/file
23 file
24 EOF
25         test_cmp expect actual
26 '
27
28 test_expect_success 'exclude only pathspec uses default implicit pathspec' '
29         git log --oneline --format=%s -- . ":(exclude)sub" >expect &&
30         git log --oneline --format=%s -- ":(exclude)sub" >actual &&
31         test_cmp expect actual
32 '
33
34 test_expect_success 't_e_i() exclude sub' '
35         git log --oneline --format=%s -- . ":(exclude)sub" >actual &&
36         cat <<EOF >expect &&
37 sub2/file
38 file
39 EOF
40         test_cmp expect actual
41 '
42
43 test_expect_success 't_e_i() exclude sub/sub/file' '
44         git log --oneline --format=%s -- . ":(exclude)sub/sub/file" >actual &&
45         cat <<EOF >expect &&
46 sub2/file
47 sub/sub/sub/file
48 sub/file2
49 sub/file
50 file
51 EOF
52         test_cmp expect actual
53 '
54
55 test_expect_success 't_e_i() exclude sub using mnemonic' '
56         git log --oneline --format=%s -- . ":!sub" >actual &&
57         cat <<EOF >expect &&
58 sub2/file
59 file
60 EOF
61         test_cmp expect actual
62 '
63
64 test_expect_success 't_e_i() exclude :(icase)SUB' '
65         git log --oneline --format=%s -- . ":(exclude,icase)SUB" >actual &&
66         cat <<EOF >expect &&
67 sub2/file
68 file
69 EOF
70         test_cmp expect actual
71 '
72
73 test_expect_success 't_e_i() exclude sub2 from sub' '
74         (
75         cd sub &&
76         git log --oneline --format=%s -- :/ ":/!sub2" >actual &&
77         cat <<EOF >expect &&
78 sub/sub/sub/file
79 sub/file2
80 sub/sub/file
81 sub/file
82 file
83 EOF
84         test_cmp expect actual
85         )
86 '
87
88 test_expect_success 't_e_i() exclude sub/*file' '
89         git log --oneline --format=%s -- . ":(exclude)sub/*file" >actual &&
90         cat <<EOF >expect &&
91 sub2/file
92 sub/file2
93 file
94 EOF
95         test_cmp expect actual
96 '
97
98 test_expect_success 't_e_i() exclude :(glob)sub/*/file' '
99         git log --oneline --format=%s -- . ":(exclude,glob)sub/*/file" >actual &&
100         cat <<EOF >expect &&
101 sub2/file
102 sub/sub/sub/file
103 sub/file2
104 sub/file
105 file
106 EOF
107         test_cmp expect actual
108 '
109
110 test_expect_success 'm_p_d() exclude sub' '
111         git ls-files -- . ":(exclude)sub" >actual &&
112         cat <<EOF >expect &&
113 file
114 sub2/file
115 EOF
116         test_cmp expect actual
117 '
118
119 test_expect_success 'm_p_d() exclude sub/sub/file' '
120         git ls-files -- . ":(exclude)sub/sub/file" >actual &&
121         cat <<EOF >expect &&
122 file
123 sub/file
124 sub/file2
125 sub/sub/sub/file
126 sub2/file
127 EOF
128         test_cmp expect actual
129 '
130
131 test_expect_success 'm_p_d() exclude sub using mnemonic' '
132         git ls-files -- . ":!sub" >actual &&
133         cat <<EOF >expect &&
134 file
135 sub2/file
136 EOF
137         test_cmp expect actual
138 '
139
140 test_expect_success 'm_p_d() exclude :(icase)SUB' '
141         git ls-files -- . ":(exclude,icase)SUB" >actual &&
142         cat <<EOF >expect &&
143 file
144 sub2/file
145 EOF
146         test_cmp expect actual
147 '
148
149 test_expect_success 'm_p_d() exclude sub2 from sub' '
150         (
151         cd sub &&
152         git ls-files -- :/ ":/!sub2" >actual &&
153         cat <<EOF >expect &&
154 ../file
155 file
156 file2
157 sub/file
158 sub/sub/file
159 EOF
160         test_cmp expect actual
161         )
162 '
163
164 test_expect_success 'm_p_d() exclude sub/*file' '
165         git ls-files -- . ":(exclude)sub/*file" >actual &&
166         cat <<EOF >expect &&
167 file
168 sub/file2
169 sub2/file
170 EOF
171         test_cmp expect actual
172 '
173
174 test_expect_success 'm_p_d() exclude :(glob)sub/*/file' '
175         git ls-files -- . ":(exclude,glob)sub/*/file" >actual &&
176         cat <<EOF >expect &&
177 file
178 sub/file
179 sub/file2
180 sub/sub/sub/file
181 sub2/file
182 EOF
183         test_cmp expect actual
184 '
185
186 test_expect_success 'multiple exclusions' '
187         git ls-files -- ":^*/file2" ":^sub2" >actual &&
188         cat <<-\EOF >expect &&
189         file
190         sub/file
191         sub/sub/file
192         sub/sub/sub/file
193         EOF
194         test_cmp expect actual
195 '
196
197 test_expect_success 't_e_i() exclude case #8' '
198         git init case8 &&
199         (
200                 cd case8 &&
201                 echo file >file1 &&
202                 echo file >file2 &&
203                 git add file1 file2 &&
204                 git commit -m twofiles &&
205                 git grep -l file HEAD :^file2 >actual &&
206                 echo HEAD:file1 >expected &&
207                 test_cmp expected actual &&
208                 git grep -l file HEAD :^file1 >actual &&
209                 echo HEAD:file2 >expected &&
210                 test_cmp expected actual
211         )
212 '
213
214 test_expect_success 'grep --untracked PATTERN' '
215         # This test is not an actual test of exclude patterns, rather it
216         # is here solely to ensure that if any tests are inserted, deleted, or
217         # changed above, that we still have untracked files with the expected
218         # contents for the NEXT two tests.
219         cat <<-\EOF >expect-grep &&
220         actual
221         expect
222         sub/actual
223         sub/expect
224         EOF
225         git grep -l --untracked file -- >actual-grep &&
226         test_cmp expect-grep actual-grep
227 '
228
229 test_expect_success 'grep --untracked PATTERN :(exclude)DIR' '
230         cat <<-\EOF >expect-grep &&
231         actual
232         expect
233         EOF
234         git grep -l --untracked file -- ":(exclude)sub" >actual-grep &&
235         test_cmp expect-grep actual-grep
236 '
237
238 test_expect_success 'grep --untracked PATTERN :(exclude)*FILE' '
239         cat <<-\EOF >expect-grep &&
240         actual
241         sub/actual
242         EOF
243         git grep -l --untracked file -- ":(exclude)*expect" >actual-grep &&
244         test_cmp expect-grep actual-grep
245 '
246
247 test_done