mirror of
https://github.com/git/git
synced 2024-09-28 20:55:39 +00:00
diff --stat: add config option to limit filename width
Add new configuration option diff.statNameWidth=<width> that is equivalent to the command-line option --stat-name-width=<width>, but it is ignored by format-patch. This follows the logic established by the already existing configuration option diff.statGraphWidth=<width>. Limiting the widths of names and graphs in the --stat output makes sense for interactive work on wide terminals with many columns, hence the support for these configuration options. They don't affect format-patch because it already adheres to the traditional 80-column standard. Update the documentation and add more tests to cover new configuration option diff.statNameWidth=<width>. While there, perform a few minor code and whitespace cleanups here and there, as spotted. Signed-off-by: Dragan Simic <dsimic@manjaro.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
bda494f404
commit
bd48adc31d
|
@ -52,6 +52,10 @@ directories with less than 10% of the total amount of changed files,
|
|||
and accumulating child directory counts in the parent directories:
|
||||
`files,10,cumulative`.
|
||||
|
||||
diff.statNameWidth::
|
||||
Limit the width of the filename part in --stat output. If set, applies
|
||||
to all commands generating --stat output except format-patch.
|
||||
|
||||
diff.statGraphWidth::
|
||||
Limit the width of the graph part in --stat output. If set, applies
|
||||
to all commands generating --stat output except format-patch.
|
||||
|
|
|
@ -204,14 +204,15 @@ have to use `--diff-algorithm=default` option.
|
|||
part. Maximum width defaults to terminal width, or 80 columns
|
||||
if not connected to a terminal, and can be overridden by
|
||||
`<width>`. The width of the filename part can be limited by
|
||||
giving another width `<name-width>` after a comma. The width
|
||||
of the graph part can be limited by using
|
||||
`--stat-graph-width=<width>` (affects all commands generating
|
||||
a stat graph) or by setting `diff.statGraphWidth=<width>`
|
||||
(does not affect `git format-patch`).
|
||||
By giving a third parameter `<count>`, you can limit the
|
||||
output to the first `<count>` lines, followed by `...` if
|
||||
there are more.
|
||||
giving another width `<name-width>` after a comma or by setting
|
||||
`diff.statNameWidth=<width>`. The width of the graph part can be
|
||||
limited by using `--stat-graph-width=<width>` or by setting
|
||||
`diff.statGraphWidth=<width>`. Using `--stat` or
|
||||
`--stat-graph-width` affects all commands generating a stat graph,
|
||||
while setting `diff.statNameWidth` or `diff.statGraphWidth`
|
||||
does not affect `git format-patch`.
|
||||
By giving a third parameter `<count>`, you can limit the output to
|
||||
the first `<count>` lines, followed by `...` if there are more.
|
||||
+
|
||||
These parameters can also be set individually with `--stat-width=<width>`,
|
||||
`--stat-name-width=<name-width>` and `--stat-count=<count>`.
|
||||
|
|
|
@ -475,6 +475,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
|
|||
|
||||
/* Set up defaults that will apply to both no-index and regular diffs. */
|
||||
rev.diffopt.stat_width = -1;
|
||||
rev.diffopt.stat_name_width = -1;
|
||||
rev.diffopt.stat_graph_width = -1;
|
||||
rev.diffopt.flags.allow_external = 1;
|
||||
rev.diffopt.flags.allow_textconv = 1;
|
||||
|
|
|
@ -178,6 +178,7 @@ static void cmd_log_init_defaults(struct rev_info *rev)
|
|||
rev->verbose_header = 1;
|
||||
rev->diffopt.flags.recursive = 1;
|
||||
rev->diffopt.stat_width = -1; /* use full terminal width */
|
||||
rev->diffopt.stat_name_width = -1; /* respect statNameWidth config */
|
||||
rev->diffopt.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||
rev->abbrev_commit = default_abbrev_commit;
|
||||
rev->show_root_diff = default_show_root;
|
||||
|
|
|
@ -467,6 +467,7 @@ static void finish(struct commit *head_commit,
|
|||
struct diff_options opts;
|
||||
repo_diff_setup(the_repository, &opts);
|
||||
opts.stat_width = -1; /* use full terminal width */
|
||||
opts.stat_name_width = -1; /* respect statNameWidth config */
|
||||
opts.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||
opts.output_format |=
|
||||
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
||||
|
|
|
@ -1804,6 +1804,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
|||
/* We want color (if set), but no pager */
|
||||
repo_diff_setup(the_repository, &opts);
|
||||
opts.stat_width = -1; /* use full terminal width */
|
||||
opts.stat_name_width = -1; /* respect statNameWidth config */
|
||||
opts.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||
opts.output_format |=
|
||||
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
||||
|
|
11
diff.c
11
diff.c
|
@ -65,6 +65,7 @@ int diff_auto_refresh_index = 1;
|
|||
static int diff_mnemonic_prefix;
|
||||
static int diff_no_prefix;
|
||||
static int diff_relative;
|
||||
static int diff_stat_name_width;
|
||||
static int diff_stat_graph_width;
|
||||
static int diff_dirstat_permille_default = 30;
|
||||
static struct diff_options default_diff_options;
|
||||
|
@ -410,6 +411,10 @@ int git_diff_ui_config(const char *var, const char *value,
|
|||
diff_relative = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "diff.statnamewidth")) {
|
||||
diff_stat_name_width = git_config_int(var, value, ctx->kvi);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "diff.statgraphwidth")) {
|
||||
diff_stat_graph_width = git_config_int(var, value, ctx->kvi);
|
||||
return 0;
|
||||
|
@ -2704,12 +2709,14 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
|
|||
number_width = decimal_width(max_change) > number_width ?
|
||||
decimal_width(max_change) : number_width;
|
||||
|
||||
if (options->stat_name_width == -1)
|
||||
options->stat_name_width = diff_stat_name_width;
|
||||
if (options->stat_graph_width == -1)
|
||||
options->stat_graph_width = diff_stat_graph_width;
|
||||
|
||||
/*
|
||||
* Guarantee 3/8*16==6 for the graph part
|
||||
* and 5/8*16==10 for the filename part
|
||||
* Guarantee 3/8*16 == 6 for the graph part
|
||||
* and 5/8*16 == 10 for the filename part
|
||||
*/
|
||||
if (width < 16 + 6 + number_width)
|
||||
width = 16 + 6 + number_width;
|
||||
|
|
1
graph.c
1
graph.c
|
@ -339,7 +339,6 @@ void graph_setup_line_prefix(struct diff_options *diffopt)
|
|||
diffopt->output_prefix = diff_output_prefix_callback;
|
||||
}
|
||||
|
||||
|
||||
struct git_graph *graph_init(struct rev_info *opt)
|
||||
{
|
||||
struct git_graph *graph = xmalloc(sizeof(struct git_graph));
|
||||
|
|
|
@ -49,12 +49,41 @@ log -1 --stat
|
|||
EOF
|
||||
|
||||
cat >expect.60 <<-'EOF'
|
||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||
EOF
|
||||
cat >expect.6030 <<-'EOF'
|
||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||
EOF
|
||||
cat >expect2.60 <<-'EOF'
|
||||
while read verb expect cmd args
|
||||
do
|
||||
# No width limit applied when statNameWidth is ignored
|
||||
case "$expect" in expect72|expect.6030)
|
||||
test_expect_success "$cmd $verb statNameWidth config with long name" '
|
||||
git -c diff.statNameWidth=30 $cmd $args >output &&
|
||||
grep " | " output >actual &&
|
||||
test_cmp $expect actual
|
||||
';;
|
||||
esac
|
||||
# Maximum width limit still applied when statNameWidth is ignored
|
||||
case "$expect" in expect.60|expect.6030)
|
||||
test_expect_success "$cmd --stat=width $verb statNameWidth config with long name" '
|
||||
git -c diff.statNameWidth=30 $cmd $args --stat=60 >output &&
|
||||
grep " | " output >actual &&
|
||||
test_cmp $expect actual
|
||||
';;
|
||||
esac
|
||||
done <<\EOF
|
||||
ignores expect72 format-patch -1 --stdout
|
||||
ignores expect.60 format-patch -1 --stdout
|
||||
respects expect.6030 diff HEAD^ HEAD --stat
|
||||
respects expect.6030 show --stat
|
||||
respects expect.6030 log -1 --stat
|
||||
EOF
|
||||
|
||||
cat >expect.40 <<-'EOF'
|
||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||
EOF
|
||||
cat >expect2.40 <<-'EOF'
|
||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||
EOF
|
||||
|
@ -67,16 +96,16 @@ do
|
|||
test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" '
|
||||
git $cmd $args --stat=40 >output &&
|
||||
grep " | " output >actual &&
|
||||
test_cmp $expect.60 actual
|
||||
test_cmp $expect.40 actual
|
||||
'
|
||||
|
||||
test_expect_success "$cmd --stat-width=width with long name" '
|
||||
git $cmd $args --stat-width=40 >output &&
|
||||
grep " | " output >actual &&
|
||||
test_cmp $expect.60 actual
|
||||
test_cmp $expect.40 actual
|
||||
'
|
||||
|
||||
test_expect_success "$cmd --stat=...,name-width with long name" '
|
||||
test_expect_success "$cmd --stat=width,name-width with long name" '
|
||||
git $cmd $args --stat=60,30 >output &&
|
||||
grep " | " output >actual &&
|
||||
test_cmp $expect.6030 actual
|
||||
|
@ -94,7 +123,6 @@ expect show --stat
|
|||
expect log -1 --stat
|
||||
EOF
|
||||
|
||||
|
||||
test_expect_success 'preparation for big change tests' '
|
||||
>abcd &&
|
||||
git add abcd &&
|
||||
|
@ -207,7 +235,6 @@ respects expect40 show --stat
|
|||
respects expect40 log -1 --stat
|
||||
EOF
|
||||
|
||||
|
||||
cat >expect <<'EOF'
|
||||
abcd | 1000 ++++++++++++++++++++++++++
|
||||
EOF
|
||||
|
|
Loading…
Reference in a new issue