ident: say whose identity is missing when giving user.name hint

If `user.name` and `user.email` have not been configured and the
user invokes:

    git commit --author=...

without specifying the committer identity, then Git errors out with
a message asking the user to configure `user.name` and `user.email`
but doesn't tell the user which attribution was missing. This can be
confusing for a user new to Git who isn't aware of the distinction
between user, author, and committer.

Give such users a bit more help by extending the error message to
also say which attribution is expected.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2020-08-21 13:36:28 -07:00
Родитель 675a4aaf3b
Коммит 9ed104e5ca
2 изменённых файлов: 43 добавлений и 18 удалений

48
ident.c
Просмотреть файл

@ -345,18 +345,32 @@ person_only:
return 0;
}
static const char *env_hint =
N_("\n"
"*** Please tell me who you are.\n"
"\n"
"Run\n"
"\n"
" git config --global user.email \"you@example.com\"\n"
" git config --global user.name \"Your Name\"\n"
"\n"
"to set your account\'s default identity.\n"
"Omit --global to set the identity only in this repository.\n"
"\n");
static void ident_env_hint(enum want_ident whose_ident)
{
switch (whose_ident) {
case WANT_AUTHOR_IDENT:
fputs(_("Author identity unknown\n"), stderr);
break;
case WANT_COMMITTER_IDENT:
fputs(_("Committer identity unknown\n"), stderr);
break;
default:
break;
}
fputs(_("\n"
"*** Please tell me who you are.\n"
"\n"
"Run\n"
"\n"
" git config --global user.email \"you@example.com\"\n"
" git config --global user.name \"Your Name\"\n"
"\n"
"to set your account\'s default identity.\n"
"Omit --global to set the identity only in this repository.\n"
"\n"), stderr);
}
const char *fmt_ident(const char *name, const char *email,
enum want_ident whose_ident, const char *date_str, int flag)
@ -375,12 +389,12 @@ const char *fmt_ident(const char *name, const char *email,
if (!email) {
if (strict && ident_use_config_only
&& !(ident_config_given & IDENT_MAIL_GIVEN)) {
fputs(_(env_hint), stderr);
ident_env_hint(whose_ident);
die(_("no email was given and auto-detection is disabled"));
}
email = ident_default_email();
if (strict && default_email_is_bogus) {
fputs(_(env_hint), stderr);
ident_env_hint(whose_ident);
die(_("unable to auto-detect email address (got '%s')"), email);
}
}
@ -397,13 +411,13 @@ const char *fmt_ident(const char *name, const char *email,
if (!name) {
if (strict && ident_use_config_only
&& !(ident_config_given & IDENT_NAME_GIVEN)) {
fputs(_(env_hint), stderr);
ident_env_hint(whose_ident);
die(_("no name was given and auto-detection is disabled"));
}
name = ident_default_name();
using_default = 1;
if (strict && default_name_is_bogus) {
fputs(_(env_hint), stderr);
ident_env_hint(whose_ident);
die(_("unable to auto-detect name (got '%s')"), name);
}
}
@ -411,7 +425,7 @@ const char *fmt_ident(const char *name, const char *email,
struct passwd *pw;
if (strict) {
if (using_default)
fputs(_(env_hint), stderr);
ident_env_hint(whose_ident);
die(_("empty ident name (for <%s>) not allowed"), email);
}
pw = xgetpwuid_self(NULL);

Просмотреть файл

@ -29,7 +29,18 @@ 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_i18ngrep "empty ident name" err &&
test_i18ngrep "Author identity unknown" err
)
'
test_expect_success 'empty configured name does not auto-detect for committer' '
(
sane_unset GIT_COMMITTER_NAME &&
test_must_fail \
git -c user.name= commit --allow-empty -m foo 2>err &&
test_i18ngrep "empty ident name" err &&
test_i18ngrep "Committer identity unknown" err
)
'