From 8b504db309c3b08e8ba7bd425a5fa29c29d8a4d5 Mon Sep 17 00:00:00 2001 From: Quentin Neill Date: Sun, 31 May 2015 14:27:37 -0500 Subject: [PATCH] blame: add blame.showEmail configuration Complement existing --show-email option with fallback configuration variable, with tests. Signed-off-by: Quentin Neill Signed-off-by: Junio C Hamano --- Documentation/git-blame.txt | 2 ++ builtin/blame.c | 10 +++++- t/t8002-blame.sh | 62 +++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt index 9f23a861ce..e6e947c808 100644 --- a/Documentation/git-blame.txt +++ b/Documentation/git-blame.txt @@ -76,6 +76,8 @@ include::blame-options.txt[] -e:: --show-email:: Show the author email instead of author name (Default: off). + This can also be controlled via the `blame.showEmail` config + option. -w:: Ignore whitespace when comparing the parent's version and diff --git a/builtin/blame.c b/builtin/blame.c index 06484c2e0e..b361b57396 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -2185,6 +2185,14 @@ static int git_blame_config(const char *var, const char *value, void *cb) blank_boundary = git_config_bool(var, value); return 0; } + if (!strcmp(var, "blame.showemail")) { + int *output_option = cb; + if (git_config_bool(var, value)) + *output_option |= OUTPUT_SHOW_EMAIL; + else + *output_option &= ~OUTPUT_SHOW_EMAIL; + return 0; + } if (!strcmp(var, "blame.date")) { if (!value) return config_error_nonbool(var); @@ -2528,7 +2536,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) unsigned int range_i; long anchor; - git_config(git_blame_config, NULL); + git_config(git_blame_config, &output_option); init_revisions(&revs, NULL); revs.date_mode = blame_date_mode; DIFF_OPT_SET(&revs.diffopt, ALLOW_TEXTCONV); diff --git a/t/t8002-blame.sh b/t/t8002-blame.sh index 5cdf3f178e..ff09aced68 100755 --- a/t/t8002-blame.sh +++ b/t/t8002-blame.sh @@ -19,4 +19,66 @@ test_expect_success 'blame --show-email' ' "" 1 ' +test_expect_success 'setup showEmail tests' ' + echo "bin: test number 1" >one && + git add one && + GIT_AUTHOR_NAME=name1 \ + GIT_AUTHOR_EMAIL=email1@test.git \ + git commit -m First --date="2010-01-01 01:00:00" && + cat >expected_n <<-\EOF && + (name1 2010-01-01 01:00:00 +0000 1) bin: test number 1 + EOF + cat >expected_e <<-\EOF + ( 2010-01-01 01:00:00 +0000 1) bin: test number 1 + EOF +' + +find_blame () { + sed -e 's/^[^(]*//' +} + +test_expect_success 'blame with no options and no config' ' + git blame one >blame && + find_blame result && + test_cmp expected_n result +' + +test_expect_success 'blame with showemail options' ' + git blame --show-email one >blame1 && + find_blame result && + test_cmp expected_e result && + git blame -e one >blame2 && + find_blame result && + test_cmp expected_e result && + git blame --no-show-email one >blame3 && + find_blame result && + test_cmp expected_n result +' + +test_expect_success 'blame with showEmail config false' ' + git config blame.showEmail false && + git blame one >blame1 && + find_blame result && + test_cmp expected_n result && + git blame --show-email one >blame2 && + find_blame result && + test_cmp expected_e result && + git blame -e one >blame3 && + find_blame result && + test_cmp expected_e result && + git blame --no-show-email one >blame4 && + find_blame result && + test_cmp expected_n result +' + +test_expect_success 'blame with showEmail config true' ' + git config blame.showEmail true && + git blame one >blame1 && + find_blame result && + test_cmp expected_e result && + git blame --no-show-email one >blame2 && + find_blame result && + test_cmp expected_n result +' + test_done