Browse Source

Merge branch 'lp/diffstat-with-graph' into maint

"log --graph" was not very friendly with "--stat" option and its output
had line breaks at wrong places.

By Lucian Poston (5) and Zbigniew Jędrzejewski-Szmek (3)
* lp/diffstat-with-graph:
  t4052: work around shells unable to set COLUMNS to 1
  test-lib: skip test with COLUMNS=1 under mksh
  Prevent graph_width of stat width from falling below min
  t4052: Test diff-stat output with minimum columns
  t4052: Adjust --graph --stat output for prefixes
  Adjust stat width calculations to take --graph output into account
  Add output_prefix_length to diff_options
  t4052: test --stat output with --graph
maint
Junio C Hamano 13 years ago
parent
commit
9aa620dfae
  1. 8
      diff.c
  2. 1
      diff.h
  3. 3
      graph.c
  4. 124
      t/t4052-stat-output.sh
  5. 1
      t/test-lib.sh

8
diff.c

@ -1509,7 +1509,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) @@ -1509,7 +1509,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
*/

if (options->stat_width == -1)
width = term_columns();
width = term_columns() - options->output_prefix_length;
else
width = options->stat_width ? options->stat_width : 80;

@ -1537,8 +1537,12 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) @@ -1537,8 +1537,12 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
* Adjust adjustable widths not to exceed maximum width
*/
if (name_width + number_width + 6 + graph_width > width) {
if (graph_width > width * 3/8 - number_width - 6)
if (graph_width > width * 3/8 - number_width - 6) {
graph_width = width * 3/8 - number_width - 6;
if (graph_width < 6)
graph_width = 6;
}

if (options->stat_graph_width &&
graph_width > options->stat_graph_width)
graph_width = options->stat_graph_width;

1
diff.h

@ -150,6 +150,7 @@ struct diff_options { @@ -150,6 +150,7 @@ struct diff_options {
diff_format_fn_t format_callback;
void *format_callback_data;
diff_prefix_fn_t output_prefix;
int output_prefix_length;
void *output_prefix_data;
};


3
graph.c

@ -194,8 +194,10 @@ static struct strbuf *diff_output_prefix_callback(struct diff_options *opt, void @@ -194,8 +194,10 @@ static struct strbuf *diff_output_prefix_callback(struct diff_options *opt, void
struct git_graph *graph = data;
static struct strbuf msgbuf = STRBUF_INIT;

assert(opt);
assert(graph);

opt->output_prefix_length = graph->width;
strbuf_reset(&msgbuf);
graph_padding_line(graph, &msgbuf);
return &msgbuf;
@ -245,6 +247,7 @@ struct git_graph *graph_init(struct rev_info *opt) @@ -245,6 +247,7 @@ struct git_graph *graph_init(struct rev_info *opt)
*/
opt->diffopt.output_prefix = diff_output_prefix_callback;
opt->diffopt.output_prefix_data = graph;
opt->diffopt.output_prefix_length = 0;

return graph;
}

124
t/t4052-stat-output.sh

@ -82,11 +82,15 @@ test_expect_success 'preparation for big change tests' ' @@ -82,11 +82,15 @@ test_expect_success 'preparation for big change tests' '
cat >expect80 <<'EOF'
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF

cat >expect80-graph <<'EOF'
| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF
cat >expect200 <<'EOF'
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF

cat >expect200-graph <<'EOF'
| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF
while read verb expect cmd args
do
test_expect_success "$cmd $verb COLUMNS (big change)" '
@ -94,6 +98,14 @@ do @@ -94,6 +98,14 @@ do
grep " | " output >actual &&
test_cmp "$expect" actual
'

test "$cmd" != diff || continue

test_expect_success "$cmd --graph $verb COLUMNS (big change)" '
COLUMNS=200 git $cmd $args --graph >output
grep " | " output >actual &&
test_cmp "$expect-graph" actual
'
done <<\EOF
ignores expect80 format-patch -1 --stdout
respects expect200 diff HEAD^ HEAD --stat
@ -104,7 +116,9 @@ EOF @@ -104,7 +116,9 @@ EOF
cat >expect40 <<'EOF'
abcd | 1000 ++++++++++++++++++++++++++
EOF

cat >expect40-graph <<'EOF'
| abcd | 1000 ++++++++++++++++++++++++
EOF
while read verb expect cmd args
do
test_expect_success "$cmd $verb not enough COLUMNS (big change)" '
@ -113,11 +127,41 @@ do @@ -113,11 +127,41 @@ do
test_cmp "$expect" actual
'

test "$cmd" != diff || continue

test_expect_success "$cmd --graph $verb not enough COLUMNS (big change)" '
COLUMNS=40 git $cmd $args --graph >output
grep " | " output >actual &&
test_cmp "$expect-graph" actual
'
done <<\EOF
ignores expect80 format-patch -1 --stdout
respects expect40 diff HEAD^ HEAD --stat
respects expect40 show --stat
respects expect40 log -1 --stat
EOF

cat >expect40 <<'EOF'
abcd | 1000 ++++++++++++++++++++++++++
EOF
cat >expect40-graph <<'EOF'
| abcd | 1000 ++++++++++++++++++++++++++
EOF
while read verb expect cmd args
do
test_expect_success "$cmd $verb statGraphWidth config" '
git -c diff.statGraphWidth=26 $cmd $args >output
grep " | " output >actual &&
test_cmp "$expect" actual
'

test "$cmd" != diff || continue

test_expect_success "$cmd --graph $verb statGraphWidth config" '
git -c diff.statGraphWidth=26 $cmd $args --graph >output
grep " | " output >actual &&
test_cmp "$expect-graph" actual
'
done <<\EOF
ignores expect80 format-patch -1 --stdout
respects expect40 diff HEAD^ HEAD --stat
@ -129,6 +173,9 @@ EOF @@ -129,6 +173,9 @@ EOF
cat >expect <<'EOF'
abcd | 1000 ++++++++++++++++++++++++++
EOF
cat >expect-graph <<'EOF'
| abcd | 1000 ++++++++++++++++++++++++++
EOF
while read cmd args
do
test_expect_success "$cmd --stat=width with big change" '
@ -143,11 +190,25 @@ do @@ -143,11 +190,25 @@ do
test_cmp expect actual
'

test_expect_success "$cmd --stat-graph--width with big change" '
test_expect_success "$cmd --stat-graph-width with big change" '
git $cmd $args --stat-graph-width=26 >output
grep " | " output >actual &&
test_cmp expect actual
'

test "$cmd" != diff || continue

test_expect_success "$cmd --stat-width=width --graph with big change" '
git $cmd $args --stat-width=40 --graph >output
grep " | " output >actual &&
test_cmp expect-graph actual
'

test_expect_success "$cmd --stat-graph-width --graph with big change" '
git $cmd $args --stat-graph-width=26 --graph >output
grep " | " output >actual &&
test_cmp expect-graph actual
'
done <<\EOF
format-patch -1 --stdout
diff HEAD^ HEAD --stat
@ -164,6 +225,9 @@ test_expect_success 'preparation for long filename tests' ' @@ -164,6 +225,9 @@ test_expect_success 'preparation for long filename tests' '
cat >expect <<'EOF'
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++
EOF
cat >expect-graph <<'EOF'
| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++
EOF
while read cmd args
do
test_expect_success "$cmd --stat=width with big change is more balanced" '
@ -171,6 +235,14 @@ do @@ -171,6 +235,14 @@ do
grep " | " output >actual &&
test_cmp expect actual
'

test "$cmd" != diff || continue

test_expect_success "$cmd --stat=width --graph with big change is balanced" '
git $cmd $args --stat-width=60 --graph >output &&
grep " | " output >actual &&
test_cmp expect-graph actual
'
done <<\EOF
format-patch -1 --stdout
diff HEAD^ HEAD --stat
@ -181,9 +253,15 @@ EOF @@ -181,9 +253,15 @@ EOF
cat >expect80 <<'EOF'
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
EOF
cat >expect80-graph <<'EOF'
| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
EOF
cat >expect200 <<'EOF'
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF
cat >expect200-graph <<'EOF'
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF
while read verb expect cmd args
do
test_expect_success "$cmd $verb COLUMNS (long filename)" '
@ -191,6 +269,14 @@ do @@ -191,6 +269,14 @@ do
grep " | " output >actual &&
test_cmp "$expect" actual
'

test "$cmd" != diff || continue

test_expect_success "$cmd --graph $verb COLUMNS (long filename)" '
COLUMNS=200 git $cmd $args --graph >output
grep " | " output >actual &&
test_cmp "$expect-graph" actual
'
done <<\EOF
ignores expect80 format-patch -1 --stdout
respects expect200 diff HEAD^ HEAD --stat
@ -198,6 +284,36 @@ respects expect200 show --stat @@ -198,6 +284,36 @@ respects expect200 show --stat
respects expect200 log -1 --stat
EOF

cat >expect1 <<'EOF'
...aaaaaaa | 1000 ++++++
EOF
cat >expect1-graph <<'EOF'
| ...aaaaaaa | 1000 ++++++
EOF
while read verb expect cmd args
do
test_expect_success COLUMNS_CAN_BE_1 \
"$cmd $verb prefix greater than COLUMNS (big change)" '
COLUMNS=1 git $cmd $args >output
grep " | " output >actual &&
test_cmp "$expect" actual
'

test "$cmd" != diff || continue

test_expect_success COLUMNS_CAN_BE_1 \
"$cmd --graph $verb prefix greater than COLUMNS (big change)" '
COLUMNS=1 git $cmd $args --graph >output
grep " | " output >actual &&
test_cmp "$expect-graph" actual
'
done <<\EOF
ignores expect80 format-patch -1 --stdout
respects expect1 diff HEAD^ HEAD --stat
respects expect1 show --stat
respects expect1 log -1 --stat
EOF

cat >expect <<'EOF'
abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EOF

1
t/test-lib.sh

@ -615,6 +615,7 @@ case $(uname -s) in @@ -615,6 +615,7 @@ case $(uname -s) in
;;
esac

( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
test -z "$NO_PERL" && test_set_prereq PERL
test -z "$NO_PYTHON" && test_set_prereq PYTHON
test -n "$USE_LIBPCRE" && test_set_prereq LIBPCRE

Loading…
Cancel
Save