merge-recursive: handle NULL in add_cacheinfo() correctly
[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 should error out' '
29         test_must_fail git log --oneline --format=%s -- ":(exclude)sub"
30 '
31
32 test_expect_success 't_e_i() exclude sub' '
33         git log --oneline --format=%s -- . ":(exclude)sub" >actual &&
34         cat <<EOF >expect &&
35 sub2/file
36 file
37 EOF
38         test_cmp expect actual
39 '
40
41 test_expect_success 't_e_i() exclude sub/sub/file' '
42         git log --oneline --format=%s -- . ":(exclude)sub/sub/file" >actual &&
43         cat <<EOF >expect &&
44 sub2/file
45 sub/sub/sub/file
46 sub/file2
47 sub/file
48 file
49 EOF
50         test_cmp expect actual
51 '
52
53 test_expect_success 't_e_i() exclude sub using mnemonic' '
54         git log --oneline --format=%s -- . ":!sub" >actual &&
55         cat <<EOF >expect &&
56 sub2/file
57 file
58 EOF
59         test_cmp expect actual
60 '
61
62 test_expect_success 't_e_i() exclude :(icase)SUB' '
63         git log --oneline --format=%s -- . ":(exclude,icase)SUB" >actual &&
64         cat <<EOF >expect &&
65 sub2/file
66 file
67 EOF
68         test_cmp expect actual
69 '
70
71 test_expect_success 't_e_i() exclude sub2 from sub' '
72         (
73         cd sub &&
74         git log --oneline --format=%s -- :/ ":/!sub2" >actual &&
75         cat <<EOF >expect &&
76 sub/sub/sub/file
77 sub/file2
78 sub/sub/file
79 sub/file
80 file
81 EOF
82         test_cmp expect actual
83         )
84 '
85
86 test_expect_success 't_e_i() exclude sub/*file' '
87         git log --oneline --format=%s -- . ":(exclude)sub/*file" >actual &&
88         cat <<EOF >expect &&
89 sub2/file
90 sub/file2
91 file
92 EOF
93         test_cmp expect actual
94 '
95
96 test_expect_success 't_e_i() exclude :(glob)sub/*/file' '
97         git log --oneline --format=%s -- . ":(exclude,glob)sub/*/file" >actual &&
98         cat <<EOF >expect &&
99 sub2/file
100 sub/sub/sub/file
101 sub/file2
102 sub/file
103 file
104 EOF
105         test_cmp expect actual
106 '
107
108 test_expect_success 'm_p_d() exclude sub' '
109         git ls-files -- . ":(exclude)sub" >actual &&
110         cat <<EOF >expect &&
111 file
112 sub2/file
113 EOF
114         test_cmp expect actual
115 '
116
117 test_expect_success 'm_p_d() exclude sub/sub/file' '
118         git ls-files -- . ":(exclude)sub/sub/file" >actual &&
119         cat <<EOF >expect &&
120 file
121 sub/file
122 sub/file2
123 sub/sub/sub/file
124 sub2/file
125 EOF
126         test_cmp expect actual
127 '
128
129 test_expect_success 'm_p_d() exclude sub using mnemonic' '
130         git ls-files -- . ":!sub" >actual &&
131         cat <<EOF >expect &&
132 file
133 sub2/file
134 EOF
135         test_cmp expect actual
136 '
137
138 test_expect_success 'm_p_d() exclude :(icase)SUB' '
139         git ls-files -- . ":(exclude,icase)SUB" >actual &&
140         cat <<EOF >expect &&
141 file
142 sub2/file
143 EOF
144         test_cmp expect actual
145 '
146
147 test_expect_success 'm_p_d() exclude sub2 from sub' '
148         (
149         cd sub &&
150         git ls-files -- :/ ":/!sub2" >actual &&
151         cat <<EOF >expect &&
152 ../file
153 file
154 file2
155 sub/file
156 sub/sub/file
157 EOF
158         test_cmp expect actual
159         )
160 '
161
162 test_expect_success 'm_p_d() exclude sub/*file' '
163         git ls-files -- . ":(exclude)sub/*file" >actual &&
164         cat <<EOF >expect &&
165 file
166 sub/file2
167 sub2/file
168 EOF
169         test_cmp expect actual
170 '
171
172 test_expect_success 'm_p_d() exclude :(glob)sub/*/file' '
173         git ls-files -- . ":(exclude,glob)sub/*/file" >actual &&
174         cat <<EOF >expect &&
175 file
176 sub/file
177 sub/file2
178 sub/sub/sub/file
179 sub2/file
180 EOF
181         test_cmp expect actual
182 '
183
184 test_done