From 6468a4e5486d01e4da5ea8e8f2990523c3d18688 Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Thu, 27 Sep 2012 15:12:52 -0400 Subject: 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 Signed-off-by: Junio C Hamano diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt index 67a90a8..75ab8a5 100644 --- a/Documentation/diff-config.txt +++ b/Documentation/diff-config.txt @@ -56,6 +56,10 @@ diff.statGraphWidth:: Limit the width of the graph part in --stat output. If set, applies to all commands generating --stat output except format-patch. +diff.context:: + Generate diffs with lines of context instead of the default of + 3. This value is overridden by the -U 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/diff.c b/diff.c index 35d3f07..86e5f2a 100644 --- a/diff.c +++ b/diff.c @@ -26,6 +26,7 @@ static int diff_detect_rename_default; 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 const char *diff_word_regex_cfg; static const char *external_diff_cmd_cfg; 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); 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")) { diff_detect_rename_default = git_config_rename(var, value); return 0; @@ -3170,7 +3177,7 @@ void diff_setup(struct diff_options *options) options->break_opt = -1; options->rename_limit = -1; options->dirstat_permille = diff_dirstat_permille_default; - options->context = 3; + options->context = diff_context_default; DIFF_OPT_SET(options, RENAME_EMPTY); options->change = diff_change; diff --git a/t/t4055-diff-context.sh b/t/t4055-diff-context.sh new file mode 100755 index 0000000..3527686 --- /dev/null +++ b/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 -- cgit v0.10.2-6-g49f6 From 50fb51e7e81748182a770d3943ec5730357b27e7 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 2 Oct 2012 11:50:16 -0700 Subject: t4055: avoid use of sed 'a' command The 'a', 'i' and 'c' commands take a literal text to be added followed by backslash, but then in the source we cannot indent the literal text which makes it ugly. We need to also remember to double the backslash inside double quotes. Avoid these issues altogether by having an extra line in a template file and generate test vectors by deleting the line or replacing the line and not using the 'a' command. Signed-off-by: Junio C Hamano diff --git a/t/t4055-diff-context.sh b/t/t4055-diff-context.sh index 3527686..97172b4 100755 --- a/t/t4055-diff-context.sh +++ b/t/t4055-diff-context.sh @@ -8,7 +8,7 @@ test_description='diff.context configuration' . ./test-lib.sh test_expect_success 'setup' ' - cat >x <<-\EOF && + cat >template <<-\EOF && firstline b c @@ -16,6 +16,7 @@ test_expect_success 'setup' ' e f preline + TARGET postline i j @@ -24,17 +25,15 @@ test_expect_success 'setup' ' m n EOF + sed "/TARGET/d" >x