Vegard Nossum <vegard.nossum@xxxxxxxxxx> writes: > diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt > index 58f4bd6..d8cd854 100644 > --- a/Documentation/diff-config.txt > +++ b/Documentation/diff-config.txt > @@ -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 <n> lines, thereby > + fusing the hunks that are close to each other. The default is 0, > + meaning no fusing will occur. This value is overridden by the > + --inter-hunk-context option. This is good if it were a description for "--inter-hunk-context=<n>", but the text needs to be adjusted if it were to be used for "diff.interHunkContext". It is unclear how the '<n>' the description refers to comes from. I suspect that it would be sufficient to just revert the first sentence to exactly match the way --inter-hunk-context=<lines> is described. > diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt > index e6215c3..a219aa2 100644 > --- a/Documentation/diff-options.txt > +++ b/Documentation/diff-options.txt > @@ -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. This one is good, but then "The default is 0, meaning no fusing will occur." in "diff.interHunkContext" is misleading and unnecessary. When "diff.interHunkContext" is not set, it simply is not set (as opposed to having a default value of 0). > diff --git a/t/t4032-diff-inter-hunk-context.sh b/t/t4032-diff-inter-hunk-context.sh > index e4e3e28..d9ac9d1 100755 > --- a/t/t4032-diff-inter-hunk-context.sh > +++ b/t/t4032-diff-inter-hunk-context.sh > @@ -16,11 +16,15 @@ f() { > } > > t() { > + use_config="" It is more customary to just say use_config= All of the above are micronits that I can locally touch-up. For now, I'll queue the following. -- >8 -- From: Vegard Nossum <vegard.nossum@xxxxxxxxxx> Date: Thu, 12 Jan 2017 13:21:11 +0100 Subject: [PATCH] diff: add interhunk context config option The --inter-hunk-context= option was added in commit 6d0e674a5754 ("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@xxxxxxxxxx> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- Documentation/diff-config.txt | 6 ++++++ Documentation/diff-options.txt | 2 ++ diff.c | 8 ++++++++ t/t4032-diff-inter-hunk-context.sh | 27 ++++++++++++++++++++++++++- 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt index d8570f2a75..15521f5191 100644 --- a/Documentation/diff-config.txt +++ b/Documentation/diff-config.txt @@ -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 diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index e6215c372c..a219aa2907 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -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:: diff --git a/diff.c b/diff.c index e2eb6d66a9..f08cd8e033 100644 --- a/diff.c +++ b/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); diff --git a/t/t4032-diff-inter-hunk-context.sh b/t/t4032-diff-inter-hunk-context.sh index e4e3e28fc7..bada0cbd32 100755 --- a/t/t4032-diff-inter-hunk-context.sh +++ b/t/t4032-diff-inter-hunk-context.sh @@ -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 -- 2.11.0-559-ge2476dcca1