blame: add blame.showEmail configuration

Complement existing --show-email option with fallback
configuration variable, with tests.

Signed-off-by: Quentin Neill <quentin.neill@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Quentin Neill 2015-05-31 14:27:37 -05:00 committed by Junio C Hamano
parent 3d4a3ffe64
commit 8b504db309
3 changed files with 73 additions and 1 deletions

View File

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

View File

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

View File

@ -19,4 +19,66 @@ test_expect_success 'blame --show-email' '
"<E at test dot git>" 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
(<email1@test.git> 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 <blame >result &&
test_cmp expected_n result
'
test_expect_success 'blame with showemail options' '
git blame --show-email one >blame1 &&
find_blame <blame1 >result &&
test_cmp expected_e result &&
git blame -e one >blame2 &&
find_blame <blame2 >result &&
test_cmp expected_e result &&
git blame --no-show-email one >blame3 &&
find_blame <blame3 >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 <blame1 >result &&
test_cmp expected_n result &&
git blame --show-email one >blame2 &&
find_blame <blame2 >result &&
test_cmp expected_e result &&
git blame -e one >blame3 &&
find_blame <blame3 >result &&
test_cmp expected_e result &&
git blame --no-show-email one >blame4 &&
find_blame <blame4 >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 <blame1 >result &&
test_cmp expected_e result &&
git blame --no-show-email one >blame2 &&
find_blame <blame2 >result &&
test_cmp expected_n result
'
test_done