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

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

From
Kristian Høgsberg <krh@redhat.com>
Date
Nov 12, 2007, 19:38 UTC
Message-ID
<1194896334.2869.7.camel@hinata.boston.redhat.com>
In-Reply-To
<Pine.LNX.4.64.0711111735100.4362@racer.site>
On Sun, 2007-11-11 at 17:35 +0000, Johannes Schindelin wrote:
> When amending a commit with a new author, the author date is taken
> from the original commit.

The new determine_author_info() should fix this. There was a problem earlier that Junio pointed out and I sent a patch to update determine_author_info() to do the right thing for amend commits. The test suite still pass without this patch, and if you look carefully a determine_author_info(), you can see it does the right thing:

  1) Default to getenv for name, email and date
  2) If a commit has been specified (-c, -C or --amend), we parse the
author name, email and date from use_message_buffer, which holds the
commit, overriding the values from getenv.
  3) If --author has be passed, we parse name and email from the
argument and override whatever name and email the two previous steps
came up with.

Then we add the author line to the commit buffer under construction based on these values.

I suggest we back this patch out.

cheers, Kristian

Show 39 quoted lines
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  builtin-commit.c |   16 ++++++++++++++++
>  1 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/builtin-commit.c b/builtin-commit.c
> index a84a729..6be6def 100644
> --- a/builtin-commit.c
> +++ b/builtin-commit.c
> @@ -527,6 +527,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);
> @@ -536,6 +537,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;
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 3 of 24 in “Various (replacement) patches to builtin-commit”
  1. 0/6 Various (replacement) patches to builtin-commitJohannes Schindelin, Nov 11, 2007
  2. 1/6 builtin-commit: fix author date with --amend --author=<author>Johannes Schindelin, Nov 11, 2007
  3. Kristian HøgsbergNov 12, 2007
  4. Johannes SchindelinNov 12, 2007
  5. Junio C HamanoNov 13, 2007
  6. 2/6 git status: show relative paths when run in a subdirectoryJohannes Schindelin, Nov 11, 2007
  7. 3/6 builtin-commit: fix --signoffJohannes Schindelin, Nov 11, 2007
  8. 4/6 builtin-commit --s: add a newline if the last line was no S-O-BJohannes Schindelin, Nov 11, 2007
  9. 5/6 builtin-commit: resurrect behavior for multiple -m optionsJohannes Schindelin, Nov 11, 2007
  10. Pierre HabouzitNov 11, 2007
  11. Johannes SchindelinNov 11, 2007
  12. Pierre HabouzitNov 11, 2007
  13. Pierre HabouzitNov 11, 2007
  14. 6/6 builtin-commit: Add newline when showing which commit was createdJohannes Schindelin, Nov 11, 2007
  15. Jeff KingDec 1, 2007
  16. Johannes SchindelinDec 1, 2007
  17. Jeff KingDec 2, 2007
  18. Johannes SchindelinDec 2, 2007
  19. Jeff KingDec 2, 2007
  20. Johannes SchindelinDec 2, 2007
  21. Junio C HamanoDec 2, 2007
  22. Johannes SchindelinDec 2, 2007
  23. Junio C HamanoDec 3, 2007
  24. Jeff KingDec 3, 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.