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>maint
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:
|
and accumulating child directory counts in the parent directories:
|
||||||
`files,10,cumulative`.
|
`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::
|
diff.statGraphWidth::
|
||||||
Limit the width of the graph part in --stat output. If set, applies
|
Limit the width of the graph part in --stat output. If set, applies
|
||||||
to all commands generating --stat output except format-patch.
|
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
|
part. Maximum width defaults to terminal width, or 80 columns
|
||||||
if not connected to a terminal, and can be overridden by
|
if not connected to a terminal, and can be overridden by
|
||||||
`<width>`. The width of the filename part can be limited by
|
`<width>`. The width of the filename part can be limited by
|
||||||
giving another width `<name-width>` after a comma. The width
|
giving another width `<name-width>` after a comma or by setting
|
||||||
of the graph part can be limited by using
|
`diff.statNameWidth=<width>`. The width of the graph part can be
|
||||||
`--stat-graph-width=<width>` (affects all commands generating
|
limited by using `--stat-graph-width=<width>` or by setting
|
||||||
a stat graph) or by setting `diff.statGraphWidth=<width>`
|
`diff.statGraphWidth=<width>`. Using `--stat` or
|
||||||
(does not affect `git format-patch`).
|
`--stat-graph-width` affects all commands generating a stat graph,
|
||||||
By giving a third parameter `<count>`, you can limit the
|
while setting `diff.statNameWidth` or `diff.statGraphWidth`
|
||||||
output to the first `<count>` lines, followed by `...` if
|
does not affect `git format-patch`.
|
||||||
there are more.
|
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>`,
|
These parameters can also be set individually with `--stat-width=<width>`,
|
||||||
`--stat-name-width=<name-width>` and `--stat-count=<count>`.
|
`--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. */
|
/* Set up defaults that will apply to both no-index and regular diffs. */
|
||||||
rev.diffopt.stat_width = -1;
|
rev.diffopt.stat_width = -1;
|
||||||
|
rev.diffopt.stat_name_width = -1;
|
||||||
rev.diffopt.stat_graph_width = -1;
|
rev.diffopt.stat_graph_width = -1;
|
||||||
rev.diffopt.flags.allow_external = 1;
|
rev.diffopt.flags.allow_external = 1;
|
||||||
rev.diffopt.flags.allow_textconv = 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->verbose_header = 1;
|
||||||
rev->diffopt.flags.recursive = 1;
|
rev->diffopt.flags.recursive = 1;
|
||||||
rev->diffopt.stat_width = -1; /* use full terminal width */
|
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->diffopt.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||||
rev->abbrev_commit = default_abbrev_commit;
|
rev->abbrev_commit = default_abbrev_commit;
|
||||||
rev->show_root_diff = default_show_root;
|
rev->show_root_diff = default_show_root;
|
||||||
|
|
|
@ -467,6 +467,7 @@ static void finish(struct commit *head_commit,
|
||||||
struct diff_options opts;
|
struct diff_options opts;
|
||||||
repo_diff_setup(the_repository, &opts);
|
repo_diff_setup(the_repository, &opts);
|
||||||
opts.stat_width = -1; /* use full terminal width */
|
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.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||||
opts.output_format |=
|
opts.output_format |=
|
||||||
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
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 */
|
/* We want color (if set), but no pager */
|
||||||
repo_diff_setup(the_repository, &opts);
|
repo_diff_setup(the_repository, &opts);
|
||||||
opts.stat_width = -1; /* use full terminal width */
|
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.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||||
opts.output_format |=
|
opts.output_format |=
|
||||||
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
||||||
|
|
7
diff.c
7
diff.c
|
@ -65,6 +65,7 @@ int diff_auto_refresh_index = 1;
|
||||||
static int diff_mnemonic_prefix;
|
static int diff_mnemonic_prefix;
|
||||||
static int diff_no_prefix;
|
static int diff_no_prefix;
|
||||||
static int diff_relative;
|
static int diff_relative;
|
||||||
|
static int diff_stat_name_width;
|
||||||
static int diff_stat_graph_width;
|
static int diff_stat_graph_width;
|
||||||
static int diff_dirstat_permille_default = 30;
|
static int diff_dirstat_permille_default = 30;
|
||||||
static struct diff_options default_diff_options;
|
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);
|
diff_relative = git_config_bool(var, value);
|
||||||
return 0;
|
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")) {
|
if (!strcmp(var, "diff.statgraphwidth")) {
|
||||||
diff_stat_graph_width = git_config_int(var, value, ctx->kvi);
|
diff_stat_graph_width = git_config_int(var, value, ctx->kvi);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2704,6 +2709,8 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
|
||||||
number_width = decimal_width(max_change) > number_width ?
|
number_width = decimal_width(max_change) > 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)
|
if (options->stat_graph_width == -1)
|
||||||
options->stat_graph_width = diff_stat_graph_width;
|
options->stat_graph_width = diff_stat_graph_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;
|
diffopt->output_prefix = diff_output_prefix_callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct git_graph *graph_init(struct rev_info *opt)
|
struct git_graph *graph_init(struct rev_info *opt)
|
||||||
{
|
{
|
||||||
struct git_graph *graph = xmalloc(sizeof(struct git_graph));
|
struct git_graph *graph = xmalloc(sizeof(struct git_graph));
|
||||||
|
|
|
@ -49,12 +49,41 @@ log -1 --stat
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >expect.60 <<-'EOF'
|
cat >expect.60 <<-'EOF'
|
||||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||||
EOF
|
EOF
|
||||||
cat >expect.6030 <<-'EOF'
|
cat >expect.6030 <<-'EOF'
|
||||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||||
EOF
|
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 +
|
||||||
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 +
|
||||||
EOF
|
EOF
|
||||||
|
@ -67,16 +96,16 @@ do
|
||||||
test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" '
|
test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" '
|
||||||
git $cmd $args --stat=40 >output &&
|
git $cmd $args --stat=40 >output &&
|
||||||
grep " | " output >actual &&
|
grep " | " output >actual &&
|
||||||
test_cmp $expect.60 actual
|
test_cmp $expect.40 actual
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success "$cmd --stat-width=width with long name" '
|
test_expect_success "$cmd --stat-width=width with long name" '
|
||||||
git $cmd $args --stat-width=40 >output &&
|
git $cmd $args --stat-width=40 >output &&
|
||||||
grep " | " output >actual &&
|
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 &&
|
git $cmd $args --stat=60,30 >output &&
|
||||||
grep " | " output >actual &&
|
grep " | " output >actual &&
|
||||||
test_cmp $expect.6030 actual
|
test_cmp $expect.6030 actual
|
||||||
|
@ -94,7 +123,6 @@ expect show --stat
|
||||||
expect log -1 --stat
|
expect log -1 --stat
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
test_expect_success 'preparation for big change tests' '
|
test_expect_success 'preparation for big change tests' '
|
||||||
>abcd &&
|
>abcd &&
|
||||||
git add abcd &&
|
git add abcd &&
|
||||||
|
@ -207,7 +235,6 @@ respects expect40 show --stat
|
||||||
respects expect40 log -1 --stat
|
respects expect40 log -1 --stat
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
cat >expect <<'EOF'
|
cat >expect <<'EOF'
|
||||||
abcd | 1000 ++++++++++++++++++++++++++
|
abcd | 1000 ++++++++++++++++++++++++++
|
||||||
EOF
|
EOF
|
||||||
|
|
Loading…
Reference in New Issue