Merge branch 'db/vcs-helper' (early part) into next
[git] / t / t7508-status.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Johannes E. Schindelin
4 #
5
6 test_description='git status'
7
8 . ./test-lib.sh
9
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 . &&
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
34 test_expect_success 'status (1)' '
35
36         grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
37
38 '
39
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
63
64 test_expect_success 'status (2)' '
65
66         git status > output &&
67         test_cmp expect output
68
69 '
70
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 '
93
94 test_expect_success 'status (status.showUntrackedFiles no)' '
95         git config status.showuntrackedfiles no
96         git status >output &&
97         test_cmp expect output
98 '
99
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 '
128
129 test_expect_success 'status (status.showUntrackedFiles normal)' '
130         git config status.showuntrackedfiles normal
131         git status >output &&
132         test_cmp expect output
133 '
134
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 '
171
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
195
196 test_expect_success 'status with relative paths' '
197
198         (cd dir1 && git status) > output &&
199         test_cmp expect output
200
201 '
202
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
226
227 test_expect_success 'status without relative paths' '
228
229         git config status.relativePaths false
230         (cd dir1 && git status) > output &&
231         test_cmp expect output
232
233 '
234
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 '
255
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 '
265
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 '
294
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 '
300
301 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
302
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 '
337
338
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 '
366
367 cat >expect <<EOF
368 # On branch master
369 # Changes to be committed:
370 #   (use "git reset HEAD^1 <file>..." to unstage)
371 #
372 #       new file:   dir2/added
373 #       new file:   sm
374 #
375 # Changed but not updated:
376 #   (use "git add <file>..." to update what will be committed)
377 #   (use "git checkout -- <file>..." to discard changes in working directory)
378 #
379 #       modified:   dir1/modified
380 #
381 # Modified submodules:
382 #
383 # * sm 0000000...$head (1):
384 #   > Add foo
385 #
386 # Untracked files:
387 #   (use "git add <file>..." to include in what will be committed)
388 #
389 #       dir1/untracked
390 #       dir2/modified
391 #       dir2/untracked
392 #       expect
393 #       output
394 #       untracked
395 EOF
396 test_expect_success 'commit --dry-run submodule summary (--amend)' '
397         git config status.submodulesummary 10 &&
398         git commit --dry-run --amend >output &&
399         test_cmp expect output
400 '
401
402 test_done