diff: add interhunk context config option

The --inter-hunk-context= option was added in commit 6d0e674a57
("diff: add option to show context between close hunks"). This patch
allows configuring a default for this option.

Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Vegard Nossum 2017-01-12 13:21:11 +01:00 committed by Junio C Hamano
parent d7dffce1ce
commit c488867793
4 changed files with 42 additions and 1 deletions

View file

@ -60,6 +60,12 @@ diff.context::
Generate diffs with <n> lines of context instead of the default
of 3. This value is overridden by the -U option.
diff.interHunkContext::
Show the context between diff hunks, up to the specified number
of lines, thereby fusing the hunks that are close to each other.
This value serves as the default for the `--inter-hunk-context`
command line option.
diff.external::
If this config variable is set, diff generation is not
performed using the internal diff machinery, but using the

View file

@ -511,6 +511,8 @@ endif::git-format-patch[]
--inter-hunk-context=<lines>::
Show the context between diff hunks, up to the specified number
of lines, thereby fusing hunks that are close to each other.
Defaults to `diff.interHunkContext` or 0 if the config option
is unset.
-W::
--function-context::

8
diff.c
View file

@ -32,6 +32,7 @@ static int diff_rename_limit_default = 400;
static int diff_suppress_blank_empty;
static int diff_use_color_default = -1;
static int diff_context_default = 3;
static int diff_interhunk_context_default;
static const char *diff_word_regex_cfg;
static const char *external_diff_cmd_cfg;
static const char *diff_order_file_cfg;
@ -239,6 +240,12 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
return -1;
return 0;
}
if (!strcmp(var, "diff.interhunkcontext")) {
diff_interhunk_context_default = git_config_int(var, value);
if (diff_interhunk_context_default < 0)
return -1;
return 0;
}
if (!strcmp(var, "diff.renames")) {
diff_detect_rename_default = git_config_rename(var, value);
return 0;
@ -3362,6 +3369,7 @@ void diff_setup(struct diff_options *options)
options->rename_limit = -1;
options->dirstat_permille = diff_dirstat_permille_default;
options->context = diff_context_default;
options->interhunkcontext = diff_interhunk_context_default;
options->ws_error_highlight = ws_error_highlight_default;
DIFF_OPT_SET(options, RENAME_EMPTY);

View file

@ -16,11 +16,15 @@ f() {
}
t() {
use_config=
git config --unset diff.interHunkContext
case $# in
4) hunks=$4; cmd="diff -U$3";;
5) hunks=$5; cmd="diff -U$3 --inter-hunk-context=$4";;
6) hunks=$5; cmd="diff -U$3"; git config diff.interHunkContext $4; use_config="(diff.interHunkContext=$4) ";;
esac
label="$cmd, $1 common $2"
label="$use_config$cmd, $1 common $2"
file=f$1
expected=expected.$file.$3.$hunks
@ -89,4 +93,25 @@ t 9 lines 3 2
t 9 lines 3 2 2
t 9 lines 3 3 1
# use diff.interHunkContext?
t 1 line 0 0 2 config
t 1 line 0 1 1 config
t 1 line 0 2 1 config
t 9 lines 3 3 1 config
t 2 lines 0 0 2 config
t 2 lines 0 1 2 config
t 2 lines 0 2 1 config
t 3 lines 1 0 2 config
t 3 lines 1 1 1 config
t 3 lines 1 2 1 config
t 9 lines 3 2 2 config
t 9 lines 3 3 1 config
test_expect_success 'diff.interHunkContext invalid' '
git config diff.interHunkContext asdf &&
test_must_fail git diff &&
git config diff.interHunkContext -1 &&
test_must_fail git diff
'
test_done