am, sequencer: stop parsing our own committer ident

For the --committer-date-is-author-date option of git-am and git-rebase,
we format the committer ident, then re-parse it to find the name and
email, and then feed those back to fmt_ident().

We can simplify this by handling it all at the time of the fmt_ident()
call. We pass in the appropriate getenv() results, and if they're not
present, then our WANT_COMMITTER_IDENT flag tells fmt_ident() to fill in
the appropriate value from the config. Which is exactly what
git_committer_ident() was doing under the hood.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2020-10-23 03:26:30 -04:00
committed by Junio C Hamano
parent 5f35edd9d7
commit 2020451c5b
3 changed files with 5 additions and 44 deletions

View File

@ -98,8 +98,6 @@ struct am_state {
char *author_name;
char *author_email;
char *author_date;
char *committer_name;
char *committer_email;
char *msg;
size_t msg_len;
@ -132,8 +130,6 @@ struct am_state {
*/
static void am_state_init(struct am_state *state)
{
const char *committer;
struct ident_split id;
int gpgsign;
memset(state, 0, sizeof(*state));
@ -154,14 +150,6 @@ static void am_state_init(struct am_state *state)
if (!git_config_get_bool("commit.gpgsign", &gpgsign))
state->sign_commit = gpgsign ? "" : NULL;
committer = git_committer_info(IDENT_STRICT);
if (split_ident_line(&id, committer, strlen(committer)) < 0)
die(_("invalid committer: %s"), committer);
state->committer_name =
xmemdupz(id.name_begin, id.name_end - id.name_begin);
state->committer_email =
xmemdupz(id.mail_begin, id.mail_end - id.mail_begin);
}
/**
@ -173,8 +161,6 @@ static void am_state_release(struct am_state *state)
free(state->author_name);
free(state->author_email);
free(state->author_date);
free(state->committer_name);
free(state->committer_email);
free(state->msg);
argv_array_clear(&state->git_apply_opts);
}
@ -1594,8 +1580,9 @@ static void do_commit(const struct am_state *state)
IDENT_STRICT);
if (state->committer_date_is_author_date)
committer = fmt_ident(state->committer_name,
state->committer_email, WANT_COMMITTER_IDENT,
committer = fmt_ident(getenv("GIT_COMMITTER_NAME"),
getenv("GIT_COMMITTER_EMAIL"),
WANT_COMMITTER_IDENT,
state->ignore_date ? NULL
: state->author_date,
IDENT_STRICT);