When amending a commit with a new author, the author date is taken from the original commit. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- builtin-commit.c | 17 ++++++++++++++++- 1 files changed, 16 insertions(+), 1 deletions(-) diff --git a/builtin-commit.c b/builtin-commit.c index bba9b82..03f0b9d 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -278,7 +278,6 @@ static void determine_author_info(struct strbuf *sb) die("malformed --author parameter\n"); name = xstrndup(force_author, eoname - force_author); email = xstrndup(eoname + 2, eomail - eoname - 2); - /* REVIEW: drops author date from amended commit on --amend --author=<author> */ strbuf_addf(sb, "author %s\n", fmt_ident(name, email, getenv("GIT_AUTHOR_DATE"), 1)); @@ -525,6 +524,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) } else if (amend) { struct commit_list *c; struct commit *commit; + const char *author; reflog_msg = "commit (amend)"; commit = lookup_commit(head_sha1); @@ -534,6 +534,21 @@ int cmd_commit(int argc, const char **argv, const char *prefix) for (c = commit->parents; c; c = c->next) strbuf_addf(&sb, "parent %s\n", sha1_to_hex(c->item->object.sha1)); + + /* determine author date */ + author = strstr(commit->buffer, "\nauthor"); + if (author && !memmem(commit->buffer, + author + 1 - commit->buffer, + "\n\n", 2)) { + const char *email_end = strchr(author + 1, '>'); + const char *line_end = strchr(author + 1, '\n'); + if (email_end && line_end && email_end < line_end) { + char *date = xstrndup(email_end + 1, + line_end - email_end - 1); + setenv("GIT_AUTHOR_DATE", date, 1); + free(date); + } + } } else if (in_merge) { struct strbuf m; FILE *fp; -- 1.5.3.5.1634.g0fa78 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html