git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/3] builtin-commit: fix author date with --amend --author=<author>

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Nov 8, 2007, 12:16 UTC
Message-ID
<Pine.LNX.4.64.0711081215540.4362@racer.site>
In-Reply-To
<Pine.LNX.4.64.0711081213580.4362@racer.site>

When amending a commit with a new author, the author date is taken from the original commit.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 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
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 6 of 13 in “builtin-commit fixes”
  1. 0/3 builtin-commit fixesJohannes Schindelin, Nov 8, 2007
  2. 1/3 builtin-commit: fix reflog message generationJohannes Schindelin, Nov 8, 2007
  3. 2/3 launch_editor(): read the file, even when EDITOR=:Johannes Schindelin, Nov 8, 2007
  4. Johannes SixtNov 8, 2007
  5. 2/3 launch_editor(): read the file, even when EDITOR=:Johannes Schindelin, Nov 8, 2007
  6. 3/3 builtin-commit: fix author date with --amend --author=<author>Johannes Schindelin, Nov 8, 2007
  7. 4/3 t3700: avoid racy git situationJohannes Schindelin, Nov 8, 2007
  8. Johannes SixtNov 8, 2007
  9. Johannes SchindelinNov 8, 2007
  10. Kristian HøgsbergNov 8, 2007
  11. Johannes SixtNov 8, 2007
  12. Junio C HamanoNov 8, 2007
  13. Johannes SchindelinNov 9, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.