1#!/bin/sh
2#
3# Copyright (c) 2007 Johannes E. Schindelin
4#
5
6test_description='git-status'
7
8. ./test-lib.sh
9
10test_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 . &&
20
21 git status >output &&
22
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'
33
34test_expect_success 'status (1)' '
35
36 grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
37
38'
39
40cat > 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#
50# modified: dir1/modified
51#
52# Untracked files:
53# (use "git add <file>..." to include in what will be committed)
54#
55# dir1/untracked
56# dir2/modified
57# dir2/untracked
58# expect
59# output
60# untracked
61EOF
62
63test_expect_success 'status (2)' '
64
65 git status > output &&
66 git diff expect output
67
68'
69
70cat > expect << \EOF
71# On branch master
72# Changes to be committed:
73# (use "git reset HEAD <file>..." to unstage)
74#
75# new file: ../dir2/added
76#
77# Changed but not updated:
78# (use "git add <file>..." to update what will be committed)
79#
80# modified: modified
81#
82# Untracked files:
83# (use "git add <file>..." to include in what will be committed)
84#
85# untracked
86# ../dir2/modified
87# ../dir2/untracked
88# ../expect
89# ../output
90# ../untracked
91EOF
92
93test_expect_success 'status with relative paths' '
94
95 (cd dir1 && git status) > output &&
96 git diff expect output
97
98'
99
100cat > 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#
110# modified: dir1/modified
111#
112# Untracked files:
113# (use "git add <file>..." to include in what will be committed)
114#
115# dir1/untracked
116# dir2/modified
117# dir2/untracked
118# expect
119# output
120# untracked
121EOF
122
123test_expect_success 'status without relative paths' '
124
125 git config status.relativePaths false
126 (cd dir1 && git status) > output &&
127 git diff expect output
128
129'
130
131cat <<EOF >expect
132# On branch master
133# Changes to be committed:
134# (use "git reset HEAD <file>..." to unstage)
135#
136# modified: dir1/modified
137#
138# Untracked files:
139# (use "git add <file>..." to include in what will be committed)
140#
141# dir1/untracked
142# dir2/
143# expect
144# output
145# untracked
146EOF
147test_expect_success 'status of partial commit excluding new file in index' '
148 git status dir1/modified >output &&
149 test_cmp expect output
150'
151
152test_expect_success 'setup status submodule summary' '
153 test_create_repo sm && (
154 cd sm &&
155 >foo &&
156 git add foo &&
157 git commit -m "Add foo"
158 ) &&
159 git add sm
160'
161
162cat >expect <<EOF
163# On branch master
164# Changes to be committed:
165# (use "git reset HEAD <file>..." to unstage)
166#
167# new file: dir2/added
168# new file: sm
169#
170# Changed but not updated:
171# (use "git add <file>..." to update what will be committed)
172#
173# modified: dir1/modified
174#
175# Untracked files:
176# (use "git add <file>..." to include in what will be committed)
177#
178# dir1/untracked
179# dir2/modified
180# dir2/untracked
181# expect
182# output
183# untracked
184EOF
185test_expect_success 'status submodule summary is disabled by default' '
186 git status >output &&
187 test_cmp expect output
188'
189
190head=$(cd sm && git rev-parse --short=7 --verify HEAD)
191
192cat >expect <<EOF
193# On branch master
194# Changes to be committed:
195# (use "git reset HEAD <file>..." to unstage)
196#
197# new file: dir2/added
198# new file: sm
199#
200# Changed but not updated:
201# (use "git add <file>..." to update what will be committed)
202#
203# modified: dir1/modified
204#
205# Modified submodules:
206#
207# * sm 0000000...$head (1):
208# > Add foo
209#
210# Untracked files:
211# (use "git add <file>..." to include in what will be committed)
212#
213# dir1/untracked
214# dir2/modified
215# dir2/untracked
216# expect
217# output
218# untracked
219EOF
220test_expect_success 'status submodule summary' '
221 git config status.submodulesummary 10 &&
222 git status >output &&
223 test_cmp expect output
224'
225
226
227cat >expect <<EOF
228# On branch master
229# Changed but not updated:
230# (use "git add <file>..." to update what will be committed)
231#
232# modified: dir1/modified
233#
234# Untracked files:
235# (use "git add <file>..." to include in what will be committed)
236#
237# dir1/untracked
238# dir2/modified
239# dir2/untracked
240# expect
241# output
242# untracked
243no changes added to commit (use "git add" and/or "git commit -a")
244EOF
245test_expect_success 'status submodule summary (clean submodule)' '
246 git commit -m "commit submodule" &&
247 git config status.submodulesummary 10 &&
248 test_must_fail git status >output &&
249 test_cmp expect output
250'
251
252cat >expect <<EOF
253# On branch master
254# Changes to be committed:
255# (use "git reset HEAD^1 <file>..." to unstage)
256#
257# new file: dir2/added
258# new file: sm
259#
260# Changed but not updated:
261# (use "git add <file>..." to update what will be committed)
262#
263# modified: dir1/modified
264#
265# Modified submodules:
266#
267# * sm 0000000...$head (1):
268# > Add foo
269#
270# Untracked files:
271# (use "git add <file>..." to include in what will be committed)
272#
273# dir1/untracked
274# dir2/modified
275# dir2/untracked
276# expect
277# output
278# untracked
279EOF
280test_expect_success 'status submodule summary (--amend)' '
281 git config status.submodulesummary 10 &&
282 git status --amend >output &&
283 test_cmp expect output
284'
285
286test_done