Skip to content

Commit

Permalink
ident.c: check explicit identity for name and email separately
Browse files Browse the repository at this point in the history
bb1ae3f (commit: Show committer if automatic, 2008-05-04) added a logic to
check both name and email were given explicitly by the end user, but it
assumed that fmt_ident() is never called before git_default_user_config()
is called, which was fragile.  The former calls setup_ident() and fills
the "default" name and email, so the check in the config parser would have
mistakenly said both are given even if only user.name was provided.

Make the logic more robust by keeping track of name and email separately.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Santi Béjar <santi@agolina.net>
  • Loading branch information
Junio C Hamano committed Jan 10, 2010
1 parent 18e95f2 commit 91c38a2
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 8 deletions.
2 changes: 1 addition & 1 deletion builtin-commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
author_ident);
free(author_ident);

if (!user_ident_explicitly_given)
if (user_ident_explicitly_given != IDENT_ALL_GIVEN)
fprintf(fp,
"%s"
"# Committer: %s\n",
Expand Down
3 changes: 3 additions & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -925,6 +925,9 @@ extern const char *config_exclusive_filename;
#define MAX_GITNAME (1000)
extern char git_default_email[MAX_GITNAME];
extern char git_default_name[MAX_GITNAME];
#define IDENT_NAME_GIVEN 01
#define IDENT_MAIL_GIVEN 02
#define IDENT_ALL_GIVEN (IDENT_NAME_GIVEN|IDENT_MAIL_GIVEN)
extern int user_ident_explicitly_given;

extern const char *git_commit_encoding;
Expand Down
6 changes: 2 additions & 4 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -528,17 +528,15 @@ static int git_default_user_config(const char *var, const char *value)
if (!value)
return config_error_nonbool(var);
strlcpy(git_default_name, value, sizeof(git_default_name));
if (git_default_email[0])
user_ident_explicitly_given = 1;
user_ident_explicitly_given |= IDENT_NAME_GIVEN;
return 0;
}

if (!strcmp(var, "user.email")) {
if (!value)
return config_error_nonbool(var);
strlcpy(git_default_email, value, sizeof(git_default_email));
if (git_default_name[0])
user_ident_explicitly_given = 1;
user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
return 0;
}

Expand Down
7 changes: 4 additions & 3 deletions ident.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,9 +249,10 @@ const char *git_author_info(int flag)

const char *git_committer_info(int flag)
{
if (getenv("GIT_COMMITTER_NAME") &&
getenv("GIT_COMMITTER_EMAIL"))
user_ident_explicitly_given = 1;
if (getenv("GIT_COMMITTER_NAME"))
user_ident_explicitly_given |= IDENT_NAME_GIVEN;
if (getenv("GIT_COMMITTER_EMAIL"))
user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
return fmt_ident(getenv("GIT_COMMITTER_NAME"),
getenv("GIT_COMMITTER_EMAIL"),
getenv("GIT_COMMITTER_DATE"),
Expand Down

0 comments on commit 91c38a2

Please sign in to comment.