]> granicus.if.org Git - git/commitdiff
ident: do not ignore empty config name/email
authorJeff King <peff@peff.net>
Thu, 23 Feb 2017 08:17:08 +0000 (03:17 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Feb 2017 20:58:47 +0000 (12:58 -0800)
When we read user.name and user.email from a config file,
they go into strbufs. When a caller asks ident_default_name()
for the value, we fallback to auto-detecting if the strbuf
is empty.

That means that explicitly setting an empty string in the
config is identical to not setting it at all. This is
potentially confusing, as we usually accept a configured
value as the final value.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
ident.c
t/t7518-ident-corner-cases.sh

diff --git a/ident.c b/ident.c
index ead09ff7f6f4e396f61e068da1e7817b895ae77d..c0364fe3a1630086e0e3752fe3e7e51e2027ea44 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -153,7 +153,7 @@ static void copy_email(const struct passwd *pw, struct strbuf *email,
 
 const char *ident_default_name(void)
 {
-       if (!git_default_name.len) {
+       if (!(ident_config_given & IDENT_NAME_GIVEN) && !git_default_name.len) {
                copy_gecos(xgetpwuid_self(&default_name_is_bogus), &git_default_name);
                strbuf_trim(&git_default_name);
        }
@@ -162,7 +162,7 @@ const char *ident_default_name(void)
 
 const char *ident_default_email(void)
 {
-       if (!git_default_email.len) {
+       if (!(ident_config_given & IDENT_MAIL_GIVEN) && !git_default_email.len) {
                const char *email = getenv("EMAIL");
 
                if (email && email[0]) {
index 667f110f59302e84a816cf764d7c0eebfc293642..b22f631261f0a666ff5c4dc226be4f758f002709 100755 (executable)
@@ -22,4 +22,15 @@ test_expect_success 'commit rejects all-crud name' '
                git commit --allow-empty -m foo
 '
 
+# We must test the actual error message here, as an unwanted
+# auto-detection could fail for other reasons.
+test_expect_success 'empty configured name does not auto-detect' '
+       (
+               sane_unset GIT_AUTHOR_NAME &&
+               test_must_fail \
+                       git -c user.name= commit --allow-empty -m foo 2>err &&
+               test_i18ngrep "empty ident name" err
+       )
+'
+
 test_done