Browse Source

diff: diff.context configuration gives default to -U

Introduce a configuration variable diff.context that tells
Porcelain commands to use a non-default number of context
lines instead of 3 (the default).  With this variable, users
do not have to keep repeating "git log -U8" from the command
line; instead, it becomes sufficient to say "git config
diff.context 8" just once.

Signed-off-by: Jeff Muizelaar <jmuizelaar@mozilla.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff Muizelaar 12 years ago committed by Junio C Hamano
parent
commit
6468a4e548
  1. 4
      Documentation/diff-config.txt
  2. 9
      diff.c
  3. 93
      t/t4055-diff-context.sh

4
Documentation/diff-config.txt

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

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

93
t/t4055-diff-context.sh

@ -0,0 +1,93 @@
#!/bin/sh
#
# Copyright (c) 2012 Mozilla Foundation
#

test_description='diff.context configuration'

. ./test-lib.sh

test_expect_success 'setup' '
cat >x <<-\EOF &&
firstline
b
c
d
e
f
preline
postline
i
j
k
l
m
n
EOF
git update-index --add x &&
git commit -m initial &&

git cat-file blob HEAD:x |
sed "/preline/a\
ADDED" >x &&
git update-index --add x &&
git commit -m next &&

git cat-file blob HEAD:x |
sed s/ADDED/MODIFIED/ >x
'

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
Loading…
Cancel
Save