Merge branch 'jm/diff-context-config'

Teaches a new configuration variable to "git diff" Porcelain and
its friends.

* jm/diff-context-config:
  t4055: avoid use of sed 'a' command
  diff: diff.context configuration gives default to -U
This commit is contained in:
Jeff King
2012-10-25 06:41:57 -04:00
3 changed files with 104 additions and 1 deletions

View File

@ -56,6 +56,10 @@ 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.
diff.context::
Generate diffs with <n> lines of context instead of the default of
3. This value is overridden by the -U option.
diff.external:: diff.external::
If this config variable is set, diff generation is not If this config variable is set, diff generation is not
performed using the internal diff machinery, but using the performed using the internal diff machinery, but using the

9
diff.c
View File

@ -26,6 +26,7 @@ static int diff_detect_rename_default;
static int diff_rename_limit_default = 400; static int diff_rename_limit_default = 400;
static int diff_suppress_blank_empty; static int diff_suppress_blank_empty;
static int diff_use_color_default = -1; static int diff_use_color_default = -1;
static int diff_context_default = 3;
static const char *diff_word_regex_cfg; static const char *diff_word_regex_cfg;
static const char *external_diff_cmd_cfg; static const char *external_diff_cmd_cfg;
int diff_auto_refresh_index = 1; int diff_auto_refresh_index = 1;
@ -141,6 +142,12 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
diff_use_color_default = git_config_colorbool(var, value); diff_use_color_default = git_config_colorbool(var, value);
return 0; return 0;
} }
if (!strcmp(var, "diff.context")) {
diff_context_default = git_config_int(var, value);
if (diff_context_default < 0)
return -1;
return 0;
}
if (!strcmp(var, "diff.renames")) { if (!strcmp(var, "diff.renames")) {
diff_detect_rename_default = git_config_rename(var, value); diff_detect_rename_default = git_config_rename(var, value);
return 0; return 0;
@ -3170,7 +3177,7 @@ void diff_setup(struct diff_options *options)
options->break_opt = -1; options->break_opt = -1;
options->rename_limit = -1; options->rename_limit = -1;
options->dirstat_permille = diff_dirstat_permille_default; options->dirstat_permille = diff_dirstat_permille_default;
options->context = 3; options->context = diff_context_default;
DIFF_OPT_SET(options, RENAME_EMPTY); DIFF_OPT_SET(options, RENAME_EMPTY);
options->change = diff_change; options->change = diff_change;

92
t/t4055-diff-context.sh Executable file
View File

@ -0,0 +1,92 @@
#!/bin/sh
#
# Copyright (c) 2012 Mozilla Foundation
#
test_description='diff.context configuration'
. ./test-lib.sh
test_expect_success 'setup' '
cat >template <<-\EOF &&
firstline
b
c
d
e
f
preline
TARGET
postline
i
j
k
l
m
n
EOF
sed "/TARGET/d" >x <template &&
git update-index --add x &&
git commit -m initial &&
sed "s/TARGET/ADDED/" >x <template &&
git update-index --add x &&
git commit -m next &&
sed "s/TARGET/MODIFIED/" >x <template
'
test_expect_success 'the default number of context lines is 3' '
git diff >output &&
! grep "^ d" output &&
grep "^ e" output &&
grep "^ j" output &&
! grep "^ k" output
'
test_expect_success 'diff.context honored by "log"' '
git log -1 -p >output &&
! grep firstline output &&
git config diff.context 8 &&
git log -1 -p >output &&
grep "^ firstline" output
'
test_expect_success 'The -U option overrides diff.context' '
git config diff.context 8 &&
git log -U4 -1 >output &&
! grep "^ firstline" output
'
test_expect_success 'diff.context honored by "diff"' '
git config diff.context 8 &&
git diff >output &&
grep "^ firstline" output
'
test_expect_success 'plumbing not affected' '
git config diff.context 8 &&
git diff-files -p >output &&
! grep "^ firstline" output
'
test_expect_success 'non-integer config parsing' '
git config diff.context no &&
test_must_fail git diff 2>output &&
test_i18ngrep "bad config value" output
'
test_expect_success 'negative integer config parsing' '
git config diff.context -1 &&
test_must_fail git diff 2>output &&
test_i18ngrep "bad config file" output
'
test_expect_success '-U0 is valid, so is diff.context=0' '
git config diff.context 0 &&
git diff >output &&
grep "^-ADDED" output &&
grep "^+MODIFIED" output
'
test_done