Raw
1 #!/bin/sh
2
3 test_description='git status ignored modes'
4
5 . ./test-lib.sh
6
7 test_expect_success 'setup initial commit and ignore file' '
8 cat >.gitignore <<-\EOF &&
9 *.ign
10 ignored_dir/
11 !*.unignore
12 EOF
13 git add . &&
14 git commit -m "Initial commit"
15 '
16
17 test_expect_success 'Verify behavior of status on directories with ignored files' '
18 test_when_finished "git clean -fdx" &&
19 cat >expect <<-\EOF &&
20 ? expect
21 ? output
22 ! dir/ignored/ignored_1.ign
23 ! dir/ignored/ignored_2.ign
24 ! ignored/ignored_1.ign
25 ! ignored/ignored_2.ign
26 EOF
27
28 mkdir -p ignored dir/ignored &&
29 touch ignored/ignored_1.ign ignored/ignored_2.ign \
30 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
31
32 git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
33 test_filter_gitconfig output &&
34 test_cmp expect output
35 '
36
37 test_expect_success 'Verify status behavior on directory with tracked & ignored files' '
38 test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
39 cat >expect <<-\EOF &&
40 ? expect
41 ? output
42 ! dir/tracked_ignored/ignored_1.ign
43 ! dir/tracked_ignored/ignored_2.ign
44 ! tracked_ignored/ignored_1.ign
45 ! tracked_ignored/ignored_2.ign
46 EOF
47
48 mkdir -p tracked_ignored dir/tracked_ignored &&
49 touch tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
50 tracked_ignored/ignored_1.ign tracked_ignored/ignored_2.ign \
51 dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 \
52 dir/tracked_ignored/ignored_1.ign dir/tracked_ignored/ignored_2.ign &&
53
54 git add tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
55 dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 &&
56 git commit -m "commit tracked files" &&
57
58 git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
59 test_cmp expect output
60 '
61
62 test_expect_success 'Verify status behavior on directory with untracked and ignored files' '
63 test_when_finished "git clean -fdx" &&
64 cat >expect <<-\EOF &&
65 ? dir/untracked_ignored/untracked_1
66 ? dir/untracked_ignored/untracked_2
67 ? expect
68 ? output
69 ? untracked_ignored/untracked_1
70 ? untracked_ignored/untracked_2
71 ! dir/untracked_ignored/ignored_1.ign
72 ! dir/untracked_ignored/ignored_2.ign
73 ! untracked_ignored/ignored_1.ign
74 ! untracked_ignored/ignored_2.ign
75 EOF
76
77 mkdir -p untracked_ignored dir/untracked_ignored &&
78 touch untracked_ignored/untracked_1 untracked_ignored/untracked_2 \
79 untracked_ignored/ignored_1.ign untracked_ignored/ignored_2.ign \
80 dir/untracked_ignored/untracked_1 dir/untracked_ignored/untracked_2 \
81 dir/untracked_ignored/ignored_1.ign dir/untracked_ignored/ignored_2.ign &&
82
83 git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
84 test_cmp expect output
85 '
86
87 test_expect_success 'Verify status matching ignored files on ignored directory' '
88 test_when_finished "git clean -fdx" &&
89 cat >expect <<-\EOF &&
90 ? expect
91 ? output
92 ! ignored_dir/
93 EOF
94
95 mkdir ignored_dir &&
96 touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
97 ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign &&
98
99 git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
100 test_cmp expect output
101 '
102
103 test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
104 test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
105 cat >expect <<-\EOF &&
106 ? expect
107 ? output
108 ! ignored_dir/ignored_1
109 ! ignored_dir/ignored_1.ign
110 ! ignored_dir/ignored_2
111 ! ignored_dir/ignored_2.ign
112 EOF
113
114 mkdir ignored_dir &&
115 touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
116 ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
117 ignored_dir/tracked &&
118 git add -f ignored_dir/tracked &&
119 git commit -m "Force add file in ignored directory" &&
120 git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
121 test_cmp expect output
122 '
123
124 test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
125 test_when_finished "git clean -fdx" &&
126 cat >expect <<-\EOF &&
127 ? expect
128 ? output
129 ? untracked_dir/
130 ! ignored_dir/
131 ! ignored_files/ignored_1.ign
132 ! ignored_files/ignored_2.ign
133 EOF
134
135 mkdir ignored_dir ignored_files untracked_dir &&
136 touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
137 ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
138 untracked_dir/untracked &&
139 git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
140 test_cmp expect output
141 '
142
143 test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
144 test_when_finished "git clean -fdx" &&
145 cat >expect <<-\EOF &&
146 ? expect
147 ? output
148 ? untracked_dir/
149 ! ignored_dir/
150 ! ignored_files/ignored_1.ign
151 ! ignored_files/ignored_2.ign
152 EOF
153
154 mkdir ignored_dir ignored_files untracked_dir &&
155 touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
156 ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
157 untracked_dir/untracked &&
158 git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
159 test_cmp expect output
160 '
161
162 test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
163 test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
164 cat >expect <<-\EOF &&
165 ? expect
166 ? output
167 ! ignored_dir/ignored_1
168 ! ignored_dir/ignored_1.ign
169 ! ignored_dir/ignored_2
170 ! ignored_dir/ignored_2.ign
171 EOF
172
173 mkdir ignored_dir &&
174 touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
175 ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
176 ignored_dir/tracked &&
177 git add -f ignored_dir/tracked &&
178 git commit -m "Force add file in ignored directory" &&
179 git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
180 test_cmp expect output
181 '
182
183 test_expect_success 'Verify behavior of status with --ignored=no' '
184 test_when_finished "git clean -fdx" &&
185 cat >expect <<-\EOF &&
186 ? expect
187 ? output
188 EOF
189
190 mkdir -p ignored dir/ignored &&
191 touch ignored/ignored_1.ign ignored/ignored_2.ign \
192 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
193
194 git status --porcelain=v2 --ignored=no --untracked-files=all >output &&
195 test_cmp expect output
196 '
197
198 test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=all' '
199 test_when_finished "git clean -fdx" &&
200 cat >expect <<-\EOF &&
201 ? expect
202 ? output
203 ! dir/ignored/ignored_1.ign
204 ! dir/ignored/ignored_2.ign
205 ! ignored/ignored_1.ign
206 ! ignored/ignored_2.ign
207 EOF
208
209 mkdir -p ignored dir/ignored &&
210 touch ignored/ignored_1.ign ignored/ignored_2.ign \
211 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
212
213 git status --porcelain=v2 --ignored=traditional --untracked-files=all >output &&
214 test_cmp expect output
215 '
216
217 test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=normal' '
218 test_when_finished "git clean -fdx" &&
219 cat >expect <<-\EOF &&
220 ? expect
221 ? output
222 ! dir/
223 ! ignored/
224 EOF
225
226 mkdir -p ignored dir/ignored &&
227 touch ignored/ignored_1.ign ignored/ignored_2.ign \
228 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
229
230 git status --porcelain=v2 --ignored=traditional --untracked-files=normal >output &&
231 test_cmp expect output
232 '
233
234 test_done