Code

t7508-status.sh: Add tests for status -s
[git.git] / t / t7508-status.sh
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  M dir1/modified
73 A  dir2/added
74 ?? dir1/untracked
75 ?? dir2/modified
76 ?? dir2/untracked
77 ?? expect
78 ?? output
79 ?? untracked
80 EOF
82 test_expect_success 'status -s (2)' '
84         git status -s > output &&
85         test_cmp expect output
87 '
89 cat >expect <<EOF
90 # On branch master
91 # Changes to be committed:
92 #   (use "git reset HEAD <file>..." to unstage)
93 #
94 #       new file:   dir2/added
95 #
96 # Changed but not updated:
97 #   (use "git add <file>..." to update what will be committed)
98 #   (use "git checkout -- <file>..." to discard changes in working directory)
99 #
100 #       modified:   dir1/modified
102 # Untracked files not listed (use -u option to show untracked files)
103 EOF
104 test_expect_success 'status -uno' '
105         mkdir dir3 &&
106         : > dir3/untracked1 &&
107         : > dir3/untracked2 &&
108         git status -uno >output &&
109         test_cmp expect output
112 test_expect_success 'status (status.showUntrackedFiles no)' '
113         git config status.showuntrackedfiles no
114         git status >output &&
115         test_cmp expect output
118 cat >expect << EOF
119  M dir1/modified
120 A  dir2/added
121 EOF
122 test_expect_success 'status -s -uno' '
123         git config --unset status.showuntrackedfiles
124         git status -s -uno >output &&
125         test_cmp expect output
128 test_expect_success 'status -s (status.showUntrackedFiles no)' '
129         git config status.showuntrackedfiles no
130         git status -s >output &&
131         test_cmp expect output
134 cat >expect <<EOF
135 # On branch master
136 # Changes to be committed:
137 #   (use "git reset HEAD <file>..." to unstage)
139 #       new file:   dir2/added
141 # Changed but not updated:
142 #   (use "git add <file>..." to update what will be committed)
143 #   (use "git checkout -- <file>..." to discard changes in working directory)
145 #       modified:   dir1/modified
147 # Untracked files:
148 #   (use "git add <file>..." to include in what will be committed)
150 #       dir1/untracked
151 #       dir2/modified
152 #       dir2/untracked
153 #       dir3/
154 #       expect
155 #       output
156 #       untracked
157 EOF
158 test_expect_success 'status -unormal' '
159         git status -unormal >output &&
160         test_cmp expect output
163 test_expect_success 'status (status.showUntrackedFiles normal)' '
164         git config status.showuntrackedfiles normal
165         git status >output &&
166         test_cmp expect output
169 cat >expect <<EOF
170  M dir1/modified
171 A  dir2/added
172 ?? dir1/untracked
173 ?? dir2/modified
174 ?? dir2/untracked
175 ?? dir3/
176 ?? expect
177 ?? output
178 ?? untracked
179 EOF
180 test_expect_success 'status -s -unormal' '
181         git config --unset status.showuntrackedfiles
182         git status -s -unormal >output &&
183         test_cmp expect output
186 test_expect_success 'status -s (status.showUntrackedFiles normal)' '
187         git config status.showuntrackedfiles normal
188         git status -s >output &&
189         test_cmp expect output
192 cat >expect <<EOF
193 # On branch master
194 # Changes to be committed:
195 #   (use "git reset HEAD <file>..." to unstage)
197 #       new file:   dir2/added
199 # Changed but not updated:
200 #   (use "git add <file>..." to update what will be committed)
201 #   (use "git checkout -- <file>..." to discard changes in working directory)
203 #       modified:   dir1/modified
205 # Untracked files:
206 #   (use "git add <file>..." to include in what will be committed)
208 #       dir1/untracked
209 #       dir2/modified
210 #       dir2/untracked
211 #       dir3/untracked1
212 #       dir3/untracked2
213 #       expect
214 #       output
215 #       untracked
216 EOF
217 test_expect_success 'status -uall' '
218         git status -uall >output &&
219         test_cmp expect output
221 test_expect_success 'status (status.showUntrackedFiles all)' '
222         git config status.showuntrackedfiles all
223         git status >output &&
224         rm -rf dir3 &&
225         git config --unset status.showuntrackedfiles &&
226         test_cmp expect output
229 cat >expect <<EOF
230  M dir1/modified
231 A  dir2/added
232 ?? dir1/untracked
233 ?? dir2/modified
234 ?? dir2/untracked
235 ?? expect
236 ?? output
237 ?? untracked
238 EOF
239 test_expect_success 'status -s -uall' '
240         git config --unset status.showuntrackedfiles
241         git status -s -uall >output &&
242         test_cmp expect output
244 test_expect_success 'status -s (status.showUntrackedFiles all)' '
245         git config status.showuntrackedfiles all
246         git status -s >output &&
247         rm -rf dir3 &&
248         git config --unset status.showuntrackedfiles &&
249         test_cmp expect output
252 cat > expect << \EOF
253 # On branch master
254 # Changes to be committed:
255 #   (use "git reset HEAD <file>..." to unstage)
257 #       new file:   ../dir2/added
259 # Changed but not updated:
260 #   (use "git add <file>..." to update what will be committed)
261 #   (use "git checkout -- <file>..." to discard changes in working directory)
263 #       modified:   modified
265 # Untracked files:
266 #   (use "git add <file>..." to include in what will be committed)
268 #       untracked
269 #       ../dir2/modified
270 #       ../dir2/untracked
271 #       ../expect
272 #       ../output
273 #       ../untracked
274 EOF
276 test_expect_success 'status with relative paths' '
278         (cd dir1 && git status) > output &&
279         test_cmp expect output
283 cat > expect << \EOF
284  M modified
285 A  ../dir2/added
286 ?? untracked
287 ?? ../dir2/modified
288 ?? ../dir2/untracked
289 ?? ../expect
290 ?? ../output
291 ?? ../untracked
292 EOF
293 test_expect_success 'status -s with relative paths' '
295         (cd dir1 && git status -s) > output &&
296         test_cmp expect output
300 cat > expect << \EOF
301 # On branch master
302 # Changes to be committed:
303 #   (use "git reset HEAD <file>..." to unstage)
305 #       new file:   dir2/added
307 # Changed but not updated:
308 #   (use "git add <file>..." to update what will be committed)
309 #   (use "git checkout -- <file>..." to discard changes in working directory)
311 #       modified:   dir1/modified
313 # Untracked files:
314 #   (use "git add <file>..." to include in what will be committed)
316 #       dir1/untracked
317 #       dir2/modified
318 #       dir2/untracked
319 #       expect
320 #       output
321 #       untracked
322 EOF
324 test_expect_success 'status without relative paths' '
326         git config status.relativePaths false
327         (cd dir1 && git status) > output &&
328         test_cmp expect output
332 cat > expect << \EOF
333  M dir1/modified
334 A  dir2/added
335 ?? dir1/untracked
336 ?? dir2/modified
337 ?? dir2/untracked
338 ?? expect
339 ?? output
340 ?? untracked
341 EOF
343 test_expect_success 'status -s without relative paths' '
345         (cd dir1 && git status -s) > output &&
346         test_cmp expect output
350 cat <<EOF >expect
351 # On branch master
352 # Changes to be committed:
353 #   (use "git reset HEAD <file>..." to unstage)
355 #       modified:   dir1/modified
357 # Untracked files:
358 #   (use "git add <file>..." to include in what will be committed)
360 #       dir1/untracked
361 #       dir2/
362 #       expect
363 #       output
364 #       untracked
365 EOF
366 test_expect_success 'dry-run of partial commit excluding new file in index' '
367         git commit --dry-run dir1/modified >output &&
368         test_cmp expect output
371 test_expect_success 'setup status submodule summary' '
372         test_create_repo sm && (
373                 cd sm &&
374                 >foo &&
375                 git add foo &&
376                 git commit -m "Add foo"
377         ) &&
378         git add sm
381 cat >expect <<EOF
382 # On branch master
383 # Changes to be committed:
384 #   (use "git reset HEAD <file>..." to unstage)
386 #       new file:   dir2/added
387 #       new file:   sm
389 # Changed but not updated:
390 #   (use "git add <file>..." to update what will be committed)
391 #   (use "git checkout -- <file>..." to discard changes in working directory)
393 #       modified:   dir1/modified
395 # Untracked files:
396 #   (use "git add <file>..." to include in what will be committed)
398 #       dir1/untracked
399 #       dir2/modified
400 #       dir2/untracked
401 #       expect
402 #       output
403 #       untracked
404 EOF
405 test_expect_success 'status submodule summary is disabled by default' '
406         git status >output &&
407         test_cmp expect output
410 # we expect the same as the previous test
411 test_expect_success 'status --untracked-files=all does not show submodule' '
412         git status --untracked-files=all >output &&
413         test_cmp expect output
416 cat >expect <<EOF
417  M dir1/modified
418 A  dir2/added
419 A  sm
420 ?? dir1/untracked
421 ?? dir2/modified
422 ?? dir2/untracked
423 ?? expect
424 ?? output
425 ?? untracked
426 EOF
427 test_expect_success 'status -s submodule summary is disabled by default' '
428         git status -s >output &&
429         test_cmp expect output
432 # we expect the same as the previous test
433 test_expect_success 'status -s --untracked-files=all does not show submodule' '
434         git status -s --untracked-files=all >output &&
435         test_cmp expect output
438 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
440 cat >expect <<EOF
441 # On branch master
442 # Changes to be committed:
443 #   (use "git reset HEAD <file>..." to unstage)
445 #       new file:   dir2/added
446 #       new file:   sm
448 # Changed but not updated:
449 #   (use "git add <file>..." to update what will be committed)
450 #   (use "git checkout -- <file>..." to discard changes in working directory)
452 #       modified:   dir1/modified
454 # Modified submodules:
456 # * sm 0000000...$head (1):
457 #   > Add foo
459 # Untracked files:
460 #   (use "git add <file>..." to include in what will be committed)
462 #       dir1/untracked
463 #       dir2/modified
464 #       dir2/untracked
465 #       expect
466 #       output
467 #       untracked
468 EOF
469 test_expect_success 'status submodule summary' '
470         git config status.submodulesummary 10 &&
471         git status >output &&
472         test_cmp expect output
475 cat >expect <<EOF
476  M dir1/modified
477 A  dir2/added
478 A  sm
479 ?? dir1/untracked
480 ?? dir2/modified
481 ?? dir2/untracked
482 ?? expect
483 ?? output
484 ?? untracked
485 EOF
486 test_expect_success 'status -s submodule summary' '
487         git status -s >output &&
488         test_cmp expect output
491 cat >expect <<EOF
492 # On branch master
493 # Changed but not updated:
494 #   (use "git add <file>..." to update what will be committed)
495 #   (use "git checkout -- <file>..." to discard changes in working directory)
497 #       modified:   dir1/modified
499 # Untracked files:
500 #   (use "git add <file>..." to include in what will be committed)
502 #       dir1/untracked
503 #       dir2/modified
504 #       dir2/untracked
505 #       expect
506 #       output
507 #       untracked
508 no changes added to commit (use "git add" and/or "git commit -a")
509 EOF
510 test_expect_success 'status submodule summary (clean submodule)' '
511         git commit -m "commit submodule" &&
512         git config status.submodulesummary 10 &&
513         test_must_fail git commit --dry-run >output &&
514         test_cmp expect output &&
515         git status >output &&
516         test_cmp expect output
519 cat >expect <<EOF
520  M dir1/modified
521 ?? dir1/untracked
522 ?? dir2/modified
523 ?? dir2/untracked
524 ?? expect
525 ?? output
526 ?? untracked
527 EOF
528 test_expect_success 'status -s submodule summary (clean submodule)' '
529         git status -s >output &&
530         test_cmp expect output
533 cat >expect <<EOF
534 # On branch master
535 # Changes to be committed:
536 #   (use "git reset HEAD^1 <file>..." to unstage)
538 #       new file:   dir2/added
539 #       new file:   sm
541 # Changed but not updated:
542 #   (use "git add <file>..." to update what will be committed)
543 #   (use "git checkout -- <file>..." to discard changes in working directory)
545 #       modified:   dir1/modified
547 # Modified submodules:
549 # * sm 0000000...$head (1):
550 #   > Add foo
552 # Untracked files:
553 #   (use "git add <file>..." to include in what will be committed)
555 #       dir1/untracked
556 #       dir2/modified
557 #       dir2/untracked
558 #       expect
559 #       output
560 #       untracked
561 EOF
562 test_expect_success 'commit --dry-run submodule summary (--amend)' '
563         git config status.submodulesummary 10 &&
564         git commit --dry-run --amend >output &&
565         test_cmp expect output
568 test_done