Merge branch 'vn/diff-ihc-config'

"git diff" learned diff.interHunkContext configuration variable
that gives the default value for its --inter-hunk-context option.

* vn/diff-ihc-config:
  diff: add interhunk context config option
This commit is contained in:
Junio C Hamano 2017-01-23 15:59:21 -08:00
Родитель e801be066c c488867793
Коммит 8ec68d1ae2
4 изменённых файлов: 42 добавлений и 1 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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
Просмотреть файл

@ -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);

Просмотреть файл

@ -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