1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Johannes E. Schindelin
4 #
6 test_description='git status'
8 . ./test-lib.sh
10 test_expect_success 'setup' '
11 : > tracked &&
12 : > modified &&
13 mkdir dir1 &&
14 : > dir1/tracked &&
15 : > dir1/modified &&
16 mkdir dir2 &&
17 : > dir1/tracked &&
18 : > dir1/modified &&
19 git add . &&
21 git status >output &&
23 test_tick &&
24 git commit -m initial &&
25 : > untracked &&
26 : > dir1/untracked &&
27 : > dir2/untracked &&
28 echo 1 > dir1/modified &&
29 echo 2 > dir2/modified &&
30 echo 3 > dir2/added &&
31 git add dir2/added
32 '
34 test_expect_success 'status (1)' '
36 grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
38 '
40 cat > expect << \EOF
41 # On branch master
42 # Changes to be committed:
43 # (use "git reset HEAD <file>..." to unstage)
44 #
45 # new file: dir2/added
46 #
47 # Changed but not updated:
48 # (use "git add <file>..." to update what will be committed)
49 # (use "git checkout -- <file>..." to discard changes in working directory)
50 #
51 # modified: dir1/modified
52 #
53 # Untracked files:
54 # (use "git add <file>..." to include in what will be committed)
55 #
56 # dir1/untracked
57 # dir2/modified
58 # dir2/untracked
59 # expect
60 # output
61 # untracked
62 EOF
64 test_expect_success 'status (2)' '
66 git status > output &&
67 test_cmp expect output
69 '
71 cat >expect <<EOF
72 # On branch master
73 # Changes to be committed:
74 # (use "git reset HEAD <file>..." to unstage)
75 #
76 # new file: dir2/added
77 #
78 # Changed but not updated:
79 # (use "git add <file>..." to update what will be committed)
80 # (use "git checkout -- <file>..." to discard changes in working directory)
81 #
82 # modified: dir1/modified
83 #
84 # Untracked files not listed (use -u option to show untracked files)
85 EOF
86 test_expect_success 'status -uno' '
87 mkdir dir3 &&
88 : > dir3/untracked1 &&
89 : > dir3/untracked2 &&
90 git status -uno >output &&
91 test_cmp expect output
92 '
94 test_expect_success 'status (status.showUntrackedFiles no)' '
95 git config status.showuntrackedfiles no
96 git status >output &&
97 test_cmp expect output
98 '
100 cat >expect <<EOF
101 # On branch master
102 # Changes to be committed:
103 # (use "git reset HEAD <file>..." to unstage)
104 #
105 # new file: dir2/added
106 #
107 # Changed but not updated:
108 # (use "git add <file>..." to update what will be committed)
109 # (use "git checkout -- <file>..." to discard changes in working directory)
110 #
111 # modified: dir1/modified
112 #
113 # Untracked files:
114 # (use "git add <file>..." to include in what will be committed)
115 #
116 # dir1/untracked
117 # dir2/modified
118 # dir2/untracked
119 # dir3/
120 # expect
121 # output
122 # untracked
123 EOF
124 test_expect_success 'status -unormal' '
125 git status -unormal >output &&
126 test_cmp expect output
127 '
129 test_expect_success 'status (status.showUntrackedFiles normal)' '
130 git config status.showuntrackedfiles normal
131 git status >output &&
132 test_cmp expect output
133 '
135 cat >expect <<EOF
136 # On branch master
137 # Changes to be committed:
138 # (use "git reset HEAD <file>..." to unstage)
139 #
140 # new file: dir2/added
141 #
142 # Changed but not updated:
143 # (use "git add <file>..." to update what will be committed)
144 # (use "git checkout -- <file>..." to discard changes in working directory)
145 #
146 # modified: dir1/modified
147 #
148 # Untracked files:
149 # (use "git add <file>..." to include in what will be committed)
150 #
151 # dir1/untracked
152 # dir2/modified
153 # dir2/untracked
154 # dir3/untracked1
155 # dir3/untracked2
156 # expect
157 # output
158 # untracked
159 EOF
160 test_expect_success 'status -uall' '
161 git status -uall >output &&
162 test_cmp expect output
163 '
164 test_expect_success 'status (status.showUntrackedFiles all)' '
165 git config status.showuntrackedfiles all
166 git status >output &&
167 rm -rf dir3 &&
168 git config --unset status.showuntrackedfiles &&
169 test_cmp expect output
170 '
172 cat > expect << \EOF
173 # On branch master
174 # Changes to be committed:
175 # (use "git reset HEAD <file>..." to unstage)
176 #
177 # new file: ../dir2/added
178 #
179 # Changed but not updated:
180 # (use "git add <file>..." to update what will be committed)
181 # (use "git checkout -- <file>..." to discard changes in working directory)
182 #
183 # modified: modified
184 #
185 # Untracked files:
186 # (use "git add <file>..." to include in what will be committed)
187 #
188 # untracked
189 # ../dir2/modified
190 # ../dir2/untracked
191 # ../expect
192 # ../output
193 # ../untracked
194 EOF
196 test_expect_success 'status with relative paths' '
198 (cd dir1 && git status) > output &&
199 test_cmp expect output
201 '
203 cat > expect << \EOF
204 # On branch master
205 # Changes to be committed:
206 # (use "git reset HEAD <file>..." to unstage)
207 #
208 # new file: dir2/added
209 #
210 # Changed but not updated:
211 # (use "git add <file>..." to update what will be committed)
212 # (use "git checkout -- <file>..." to discard changes in working directory)
213 #
214 # modified: dir1/modified
215 #
216 # Untracked files:
217 # (use "git add <file>..." to include in what will be committed)
218 #
219 # dir1/untracked
220 # dir2/modified
221 # dir2/untracked
222 # expect
223 # output
224 # untracked
225 EOF
227 test_expect_success 'status without relative paths' '
229 git config status.relativePaths false
230 (cd dir1 && git status) > output &&
231 test_cmp expect output
233 '
235 cat <<EOF >expect
236 # On branch master
237 # Changes to be committed:
238 # (use "git reset HEAD <file>..." to unstage)
239 #
240 # modified: dir1/modified
241 #
242 # Untracked files:
243 # (use "git add <file>..." to include in what will be committed)
244 #
245 # dir1/untracked
246 # dir2/
247 # expect
248 # output
249 # untracked
250 EOF
251 test_expect_success 'dry-run of partial commit excluding new file in index' '
252 git commit --dry-run dir1/modified >output &&
253 test_cmp expect output
254 '
256 test_expect_success 'setup status submodule summary' '
257 test_create_repo sm && (
258 cd sm &&
259 >foo &&
260 git add foo &&
261 git commit -m "Add foo"
262 ) &&
263 git add sm
264 '
266 cat >expect <<EOF
267 # On branch master
268 # Changes to be committed:
269 # (use "git reset HEAD <file>..." to unstage)
270 #
271 # new file: dir2/added
272 # new file: sm
273 #
274 # Changed but not updated:
275 # (use "git add <file>..." to update what will be committed)
276 # (use "git checkout -- <file>..." to discard changes in working directory)
277 #
278 # modified: dir1/modified
279 #
280 # Untracked files:
281 # (use "git add <file>..." to include in what will be committed)
282 #
283 # dir1/untracked
284 # dir2/modified
285 # dir2/untracked
286 # expect
287 # output
288 # untracked
289 EOF
290 test_expect_success 'status submodule summary is disabled by default' '
291 git status >output &&
292 test_cmp expect output
293 '
295 # we expect the same as the previous test
296 test_expect_success 'status --untracked-files=all does not show submodule' '
297 git status --untracked-files=all >output &&
298 test_cmp expect output
299 '
301 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
303 cat >expect <<EOF
304 # On branch master
305 # Changes to be committed:
306 # (use "git reset HEAD <file>..." to unstage)
307 #
308 # new file: dir2/added
309 # new file: sm
310 #
311 # Changed but not updated:
312 # (use "git add <file>..." to update what will be committed)
313 # (use "git checkout -- <file>..." to discard changes in working directory)
314 #
315 # modified: dir1/modified
316 #
317 # Modified submodules:
318 #
319 # * sm 0000000...$head (1):
320 # > Add foo
321 #
322 # Untracked files:
323 # (use "git add <file>..." to include in what will be committed)
324 #
325 # dir1/untracked
326 # dir2/modified
327 # dir2/untracked
328 # expect
329 # output
330 # untracked
331 EOF
332 test_expect_success 'status submodule summary' '
333 git config status.submodulesummary 10 &&
334 git status >output &&
335 test_cmp expect output
336 '
339 cat >expect <<EOF
340 # On branch master
341 # Changed but not updated:
342 # (use "git add <file>..." to update what will be committed)
343 # (use "git checkout -- <file>..." to discard changes in working directory)
344 #
345 # modified: dir1/modified
346 #
347 # Untracked files:
348 # (use "git add <file>..." to include in what will be committed)
349 #
350 # dir1/untracked
351 # dir2/modified
352 # dir2/untracked
353 # expect
354 # output
355 # untracked
356 no changes added to commit (use "git add" and/or "git commit -a")
357 EOF
358 test_expect_success 'status submodule summary (clean submodule)' '
359 git commit -m "commit submodule" &&
360 git config status.submodulesummary 10 &&
361 test_must_fail git commit --dry-run >output &&
362 test_cmp expect output &&
363 git status >output &&
364 test_cmp expect output
365 '
367 test_expect_failure 'status -z implies porcelain' '
368 git status --porcelain |
369 perl -pe "s/\012/\000/g" >expect &&
370 git status -z >output &&
371 test_cmp expect output
372 '
374 cat >expect <<EOF
375 # On branch master
376 # Changes to be committed:
377 # (use "git reset HEAD^1 <file>..." to unstage)
378 #
379 # new file: dir2/added
380 # new file: sm
381 #
382 # Changed but not updated:
383 # (use "git add <file>..." to update what will be committed)
384 # (use "git checkout -- <file>..." to discard changes in working directory)
385 #
386 # modified: dir1/modified
387 #
388 # Modified submodules:
389 #
390 # * sm 0000000...$head (1):
391 # > Add foo
392 #
393 # Untracked files:
394 # (use "git add <file>..." to include in what will be committed)
395 #
396 # dir1/untracked
397 # dir2/modified
398 # dir2/untracked
399 # expect
400 # output
401 # untracked
402 EOF
403 test_expect_success 'commit --dry-run submodule summary (--amend)' '
404 git config status.submodulesummary 10 &&
405 git commit --dry-run --amend >output &&
406 test_cmp expect output
407 '
409 test_done