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 test_cmp 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: dir1/modified
81#
82# Untracked files not listed (use -u option to show untracked files)
83EOF
84test_expect_success 'status -uno' '
85 mkdir dir3 &&
86 : > dir3/untracked1 &&
87 : > dir3/untracked2 &&
88 git status -uno >output &&
89 test_cmp expect output
90'
91
92test_expect_success 'status (status.showUntrackedFiles no)' '
93 git config status.showuntrackedfiles no
94 git status >output &&
95 test_cmp expect output
96'
97
98cat >expect <<EOF
99# On branch master
100# Changes to be committed:
101# (use "git reset HEAD <file>..." to unstage)
102#
103# new file: dir2/added
104#
105# Changed but not updated:
106# (use "git add <file>..." to update what will be committed)
107#
108# modified: dir1/modified
109#
110# Untracked files:
111# (use "git add <file>..." to include in what will be committed)
112#
113# dir1/untracked
114# dir2/modified
115# dir2/untracked
116# dir3/
117# expect
118# output
119# untracked
120EOF
121test_expect_success 'status -unormal' '
122 git status -unormal >output &&
123 test_cmp expect output
124'
125
126test_expect_success 'status (status.showUntrackedFiles normal)' '
127 git config status.showuntrackedfiles normal
128 git status >output &&
129 test_cmp expect output
130'
131
132cat >expect <<EOF
133# On branch master
134# Changes to be committed:
135# (use "git reset HEAD <file>..." to unstage)
136#
137# new file: dir2/added
138#
139# Changed but not updated:
140# (use "git add <file>..." to update what will be committed)
141#
142# modified: dir1/modified
143#
144# Untracked files:
145# (use "git add <file>..." to include in what will be committed)
146#
147# dir1/untracked
148# dir2/modified
149# dir2/untracked
150# dir3/untracked1
151# dir3/untracked2
152# expect
153# output
154# untracked
155EOF
156test_expect_success 'status -uall' '
157 git status -uall >output &&
158 test_cmp expect output
159'
160test_expect_success 'status (status.showUntrackedFiles all)' '
161 git config status.showuntrackedfiles all
162 git status >output &&
163 rm -rf dir3 &&
164 git config --unset status.showuntrackedfiles &&
165 test_cmp expect output
166'
167
168cat > expect << \EOF
169# On branch master
170# Changes to be committed:
171# (use "git reset HEAD <file>..." to unstage)
172#
173# new file: ../dir2/added
174#
175# Changed but not updated:
176# (use "git add <file>..." to update what will be committed)
177#
178# modified: modified
179#
180# Untracked files:
181# (use "git add <file>..." to include in what will be committed)
182#
183# untracked
184# ../dir2/modified
185# ../dir2/untracked
186# ../expect
187# ../output
188# ../untracked
189EOF
190
191test_expect_success 'status with relative paths' '
192
193 (cd dir1 && git status) > output &&
194 test_cmp expect output
195
196'
197
198cat > expect << \EOF
199# On branch master
200# Changes to be committed:
201# (use "git reset HEAD <file>..." to unstage)
202#
203# new file: dir2/added
204#
205# Changed but not updated:
206# (use "git add <file>..." to update what will be committed)
207#
208# modified: dir1/modified
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
220
221test_expect_success 'status without relative paths' '
222
223 git config status.relativePaths false
224 (cd dir1 && git status) > output &&
225 test_cmp expect output
226
227'
228
229cat <<EOF >expect
230# On branch master
231# Changes to be committed:
232# (use "git reset HEAD <file>..." to unstage)
233#
234# modified: dir1/modified
235#
236# Untracked files:
237# (use "git add <file>..." to include in what will be committed)
238#
239# dir1/untracked
240# dir2/
241# expect
242# output
243# untracked
244EOF
245test_expect_success 'status of partial commit excluding new file in index' '
246 git status dir1/modified >output &&
247 test_cmp expect output
248'
249
250test_expect_success 'setup status submodule summary' '
251 test_create_repo sm && (
252 cd sm &&
253 >foo &&
254 git add foo &&
255 git commit -m "Add foo"
256 ) &&
257 git add sm
258'
259
260cat >expect <<EOF
261# On branch master
262# Changes to be committed:
263# (use "git reset HEAD <file>..." to unstage)
264#
265# new file: dir2/added
266# new file: sm
267#
268# Changed but not updated:
269# (use "git add <file>..." to update what will be committed)
270#
271# modified: dir1/modified
272#
273# Untracked files:
274# (use "git add <file>..." to include in what will be committed)
275#
276# dir1/untracked
277# dir2/modified
278# dir2/untracked
279# expect
280# output
281# untracked
282EOF
283test_expect_success 'status submodule summary is disabled by default' '
284 git status >output &&
285 test_cmp expect output
286'
287
288# we expect the same as the previous test
289test_expect_success 'status --untracked-files=all does not show submodule' '
290 git status --untracked-files=all >output &&
291 test_cmp expect output
292'
293
294head=$(cd sm && git rev-parse --short=7 --verify HEAD)
295
296cat >expect <<EOF
297# On branch master
298# Changes to be committed:
299# (use "git reset HEAD <file>..." to unstage)
300#
301# new file: dir2/added
302# new file: sm
303#
304# Changed but not updated:
305# (use "git add <file>..." to update what will be committed)
306#
307# modified: dir1/modified
308#
309# Modified submodules:
310#
311# * sm 0000000...$head (1):
312# > Add foo
313#
314# Untracked files:
315# (use "git add <file>..." to include in what will be committed)
316#
317# dir1/untracked
318# dir2/modified
319# dir2/untracked
320# expect
321# output
322# untracked
323EOF
324test_expect_success 'status submodule summary' '
325 git config status.submodulesummary 10 &&
326 git status >output &&
327 test_cmp expect output
328'
329
330
331cat >expect <<EOF
332# On branch master
333# Changed but not updated:
334# (use "git add <file>..." to update what will be committed)
335#
336# modified: dir1/modified
337#
338# Untracked files:
339# (use "git add <file>..." to include in what will be committed)
340#
341# dir1/untracked
342# dir2/modified
343# dir2/untracked
344# expect
345# output
346# untracked
347no changes added to commit (use "git add" and/or "git commit -a")
348EOF
349test_expect_success 'status submodule summary (clean submodule)' '
350 git commit -m "commit submodule" &&
351 git config status.submodulesummary 10 &&
352 test_must_fail git status >output &&
353 test_cmp expect output
354'
355
356cat >expect <<EOF
357# On branch master
358# Changes to be committed:
359# (use "git reset HEAD^1 <file>..." to unstage)
360#
361# new file: dir2/added
362# new file: sm
363#
364# Changed but not updated:
365# (use "git add <file>..." to update what will be committed)
366#
367# modified: dir1/modified
368#
369# Modified submodules:
370#
371# * sm 0000000...$head (1):
372# > Add foo
373#
374# Untracked files:
375# (use "git add <file>..." to include in what will be committed)
376#
377# dir1/untracked
378# dir2/modified
379# dir2/untracked
380# expect
381# output
382# untracked
383EOF
384test_expect_success 'status submodule summary (--amend)' '
385 git config status.submodulesummary 10 &&
386 git status --amend >output &&
387 test_cmp expect output
388'
389
390test_done