Merge branch 'bc/run-command-nullness-after-free-fix'
[git] / t / t4052-stat-output.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2012 Zbigniew JÄ™drzejewski-Szmek
4 #
5
6 test_description='test --stat output of various commands'
7
8 . ./test-lib.sh
9 . "$TEST_DIRECTORY"/lib-terminal.sh
10
11 # 120 character name
12 name=aaaaaaaaaa
13 name=$name$name$name$name$name$name$name$name$name$name$name$name
14 test_expect_success 'preparation' '
15         >"$name" &&
16         git add "$name" &&
17         git commit -m message &&
18         echo a >"$name" &&
19         git commit -m message "$name"
20 '
21
22 cat >expect72 <<-'EOF'
23  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
24 EOF
25 test_expect_success "format-patch: small change with long name gives more space to the name" '
26         git format-patch -1 --stdout >output &&
27         grep " | " output >actual &&
28         test_cmp expect72 actual
29 '
30
31 while read cmd args
32 do
33         cat >expect80 <<-'EOF'
34          ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
35         EOF
36         test_expect_success "$cmd: small change with long name gives more space to the name" '
37                 git $cmd $args >output &&
38                 grep " | " output >actual &&
39                 test_cmp expect80 actual
40         '
41 done <<\EOF
42 diff HEAD^ HEAD --stat
43 show --stat
44 log -1 --stat
45 EOF
46
47 cat >expect.60 <<-'EOF'
48  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
49 EOF
50 cat >expect.6030 <<-'EOF'
51  ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
52 EOF
53 cat >expect2.60 <<-'EOF'
54  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
55  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
56 EOF
57 cat >expect2.6030 <<-'EOF'
58  ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
59  ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
60 EOF
61 while read expect cmd args
62 do
63         test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" '
64                 git $cmd $args --stat=40 >output &&
65                 grep " | " output >actual &&
66                 test_cmp $expect.60 actual
67         '
68
69         test_expect_success "$cmd --stat-width=width with long name" '
70                 git $cmd $args --stat-width=40 >output &&
71                 grep " | " output >actual &&
72                 test_cmp $expect.60 actual
73         '
74
75         test_expect_success "$cmd --stat=...,name-width with long name" '
76                 git $cmd $args --stat=60,30 >output &&
77                 grep " | " output >actual &&
78                 test_cmp $expect.6030 actual
79         '
80
81         test_expect_success "$cmd --stat-name-width with long name" '
82                 git $cmd $args --stat-name-width=30 >output &&
83                 grep " | " output >actual &&
84                 test_cmp $expect.6030 actual
85         '
86 done <<\EOF
87 expect2 format-patch --cover-letter -1 --stdout
88 expect diff HEAD^ HEAD --stat
89 expect show --stat
90 expect log -1 --stat
91 EOF
92
93
94 test_expect_success 'preparation for big change tests' '
95         >abcd &&
96         git add abcd &&
97         git commit -m message &&
98         i=0 &&
99         while test $i -lt 1000
100         do
101                 echo $i && i=$(($i + 1))
102         done >abcd &&
103         git commit -m message abcd
104 '
105
106 cat >expect72 <<'EOF'
107  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
108  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
109 EOF
110 test_expect_success "format-patch --cover-letter ignores COLUMNS (big change)" '
111         COLUMNS=200 git format-patch -1 --stdout --cover-letter >output &&
112         grep " | " output >actual &&
113         test_cmp expect72 actual
114 '
115
116 cat >expect72 <<'EOF'
117  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
118 EOF
119 cat >expect72-graph <<'EOF'
120 |  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
121 EOF
122 cat >expect200 <<'EOF'
123  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
124 EOF
125 cat >expect200-graph <<'EOF'
126 |  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
127 EOF
128 while read verb expect cmd args
129 do
130         test_expect_success "$cmd $verb COLUMNS (big change)" '
131                 COLUMNS=200 git $cmd $args >output &&
132                 grep " | " output >actual &&
133                 test_cmp "$expect" actual
134         '
135
136         case "$cmd" in diff|show) continue;; esac
137
138         test_expect_success "$cmd --graph $verb COLUMNS (big change)" '
139                 COLUMNS=200 git $cmd $args --graph >output &&
140                 grep " | " output >actual &&
141                 test_cmp "$expect-graph" actual
142         '
143 done <<\EOF
144 ignores expect72 format-patch -1 --stdout
145 respects expect200 diff HEAD^ HEAD --stat
146 respects expect200 show --stat
147 respects expect200 log -1 --stat
148 EOF
149
150 cat >expect40 <<'EOF'
151  abcd | 1000 ++++++++++++++++++++++++++
152 EOF
153 cat >expect40-graph <<'EOF'
154 |  abcd | 1000 ++++++++++++++++++++++++
155 EOF
156 while read verb expect cmd args
157 do
158         test_expect_success "$cmd $verb not enough COLUMNS (big change)" '
159                 COLUMNS=40 git $cmd $args >output &&
160                 grep " | " output >actual &&
161                 test_cmp "$expect" actual
162         '
163
164         case "$cmd" in diff|show) continue;; esac
165
166         test_expect_success "$cmd --graph $verb not enough COLUMNS (big change)" '
167                 COLUMNS=40 git $cmd $args --graph >output &&
168                 grep " | " output >actual &&
169                 test_cmp "$expect-graph" actual
170         '
171 done <<\EOF
172 ignores expect72 format-patch -1 --stdout
173 respects expect40 diff HEAD^ HEAD --stat
174 respects expect40 show --stat
175 respects expect40 log -1 --stat
176 EOF
177
178 cat >expect40 <<'EOF'
179  abcd | 1000 ++++++++++++++++++++++++++
180 EOF
181 cat >expect40-graph <<'EOF'
182 |  abcd | 1000 ++++++++++++++++++++++++++
183 EOF
184 while read verb expect cmd args
185 do
186         test_expect_success "$cmd $verb statGraphWidth config" '
187                 git -c diff.statGraphWidth=26 $cmd $args >output &&
188                 grep " | " output >actual &&
189                 test_cmp "$expect" actual
190         '
191
192         case "$cmd" in diff|show) continue;; esac
193
194         test_expect_success "$cmd --graph $verb statGraphWidth config" '
195                 git -c diff.statGraphWidth=26 $cmd $args --graph >output &&
196                 grep " | " output >actual &&
197                 test_cmp "$expect-graph" actual
198         '
199 done <<\EOF
200 ignores expect72 format-patch -1 --stdout
201 respects expect40 diff HEAD^ HEAD --stat
202 respects expect40 show --stat
203 respects expect40 log -1 --stat
204 EOF
205
206
207 cat >expect <<'EOF'
208  abcd | 1000 ++++++++++++++++++++++++++
209 EOF
210 cat >expect-graph <<'EOF'
211 |  abcd | 1000 ++++++++++++++++++++++++++
212 EOF
213 while read cmd args
214 do
215         test_expect_success "$cmd --stat=width with big change" '
216                 git $cmd $args --stat=40 >output &&
217                 grep " | " output >actual &&
218                 test_cmp expect actual
219         '
220
221         test_expect_success "$cmd --stat-width=width with big change" '
222                 git $cmd $args --stat-width=40 >output &&
223                 grep " | " output >actual &&
224                 test_cmp expect actual
225         '
226
227         test_expect_success "$cmd --stat-graph-width with big change" '
228                 git $cmd $args --stat-graph-width=26 >output &&
229                 grep " | " output >actual &&
230                 test_cmp expect actual
231         '
232
233         case "$cmd" in diff|show) continue;; esac
234
235         test_expect_success "$cmd --stat-width=width --graph with big change" '
236                 git $cmd $args --stat-width=40 --graph >output &&
237                 grep " | " output >actual &&
238                 test_cmp expect-graph actual
239         '
240
241         test_expect_success "$cmd --stat-graph-width --graph with big change" '
242                 git $cmd $args --stat-graph-width=26 --graph >output &&
243                 grep " | " output >actual &&
244                 test_cmp expect-graph actual
245         '
246 done <<\EOF
247 format-patch -1 --stdout
248 diff HEAD^ HEAD --stat
249 show --stat
250 log -1 --stat
251 EOF
252
253 test_expect_success 'preparation for long filename tests' '
254         cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
255         git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
256         git commit -m message
257 '
258
259 cat >expect <<'EOF'
260  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++
261 EOF
262 cat >expect-graph <<'EOF'
263 |  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++
264 EOF
265 while read cmd args
266 do
267         test_expect_success "$cmd --stat=width with big change is more balanced" '
268                 git $cmd $args --stat-width=60 >output &&
269                 grep " | " output >actual &&
270                 test_cmp expect actual
271         '
272
273         case "$cmd" in diff|show) continue;; esac
274
275         test_expect_success "$cmd --stat=width --graph with big change is balanced" '
276                 git $cmd $args --stat-width=60 --graph >output &&
277                 grep " | " output >actual &&
278                 test_cmp expect-graph actual
279         '
280 done <<\EOF
281 format-patch -1 --stdout
282 diff HEAD^ HEAD --stat
283 show --stat
284 log -1 --stat
285 EOF
286
287 cat >expect72 <<'EOF'
288  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++
289 EOF
290 cat >expect72-graph <<'EOF'
291 |  ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++
292 EOF
293 cat >expect200 <<'EOF'
294  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
295 EOF
296 cat >expect200-graph <<'EOF'
297 |  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
298 EOF
299 while read verb expect cmd args
300 do
301         test_expect_success "$cmd $verb COLUMNS (long filename)" '
302                 COLUMNS=200 git $cmd $args >output &&
303                 grep " | " output >actual &&
304                 test_cmp "$expect" actual
305         '
306
307         case "$cmd" in diff|show) continue;; esac
308
309         test_expect_success "$cmd --graph $verb COLUMNS (long filename)" '
310                 COLUMNS=200 git $cmd $args --graph >output &&
311                 grep " | " output >actual &&
312                 test_cmp "$expect-graph" actual
313         '
314 done <<\EOF
315 ignores expect72 format-patch -1 --stdout
316 respects expect200 diff HEAD^ HEAD --stat
317 respects expect200 show --stat
318 respects expect200 log -1 --stat
319 EOF
320
321 cat >expect1 <<'EOF'
322  ...aaaaaaa | 1000 ++++++
323 EOF
324 cat >expect1-graph <<'EOF'
325 |  ...aaaaaaa | 1000 ++++++
326 EOF
327 while read verb expect cmd args
328 do
329         test_expect_success COLUMNS_CAN_BE_1 \
330                 "$cmd $verb prefix greater than COLUMNS (big change)" '
331                 COLUMNS=1 git $cmd $args >output &&
332                 grep " | " output >actual &&
333                 test_cmp "$expect" actual
334         '
335
336         case "$cmd" in diff|show) continue;; esac
337
338         test_expect_success COLUMNS_CAN_BE_1 \
339                 "$cmd --graph $verb prefix greater than COLUMNS (big change)" '
340                 COLUMNS=1 git $cmd $args --graph >output &&
341                 grep " | " output >actual &&
342                 test_cmp "$expect-graph" actual
343         '
344 done <<\EOF
345 ignores expect72 format-patch -1 --stdout
346 respects expect1 diff HEAD^ HEAD --stat
347 respects expect1 show --stat
348 respects expect1 log -1 --stat
349 EOF
350
351 cat >expect <<'EOF'
352  abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
353 EOF
354 test_expect_success 'merge --stat respects COLUMNS (big change)' '
355         git checkout -b branch HEAD^^ &&
356         COLUMNS=100 git merge --stat --no-ff master^ >output &&
357         grep " | " output >actual &&
358         test_cmp expect actual
359 '
360
361 cat >expect <<'EOF'
362  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++
363 EOF
364 test_expect_success 'merge --stat respects COLUMNS (long filename)' '
365         COLUMNS=100 git merge --stat --no-ff master >output &&
366         grep " | " output >actual &&
367         test_cmp expect actual
368 '
369
370 test_done