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

Re: [PATCH] git-commit: search author pattern against mailmap

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 23, 2013, 17:44 UTC
Message-ID
<xmqqbo4opajg.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1377265711-11492-1-git-send-email-apelisse@gmail.com>
Antoine Pelisse <apelisse@gmail.com> writes:
Show 18 quoted lines
> When committing for someone else, using the --author option, it can be
> nice to use the mailmap file to find the correct name spelling and email
> address.
>
> Currently, you would have to find the correct mapping in mailmap file
> first, and then use the full ident form when committing.
>
> Let's allow git-commit to find if an entry exists in mailmap file for
> that pattern, and use that instead.
>
> Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
> ---
> Hi,
> I would use that feature at work where I happen to commit some work for
> other colleagues, while we heavily rely on mailmap file to have decent indents.
>
> On the other hand, I'm kind of embarrassed to add this new option to
> git-commit.

My initial reaction was "Why should something as important as 'git commit' should be playing a guessing-game?" ;-) and I am kind of ashamed to have added 146ea068 (git commit --author=$name: look $name up in existing commits, 2008-08-26) and then am embarrased to have completely forgotten about it. I never use the feature myself.

But for that old and established "--author parameter that does not use the standard format guesses" feature to be useful, I agree that it should honor the mailmap.

I wonder if it would hurt anybody if we made this unconditional, not even with "--no-mailmap" override? Opinions?

Show 85 quoted lines
>
>  Documentation/git-commit.txt |  6 +++++-
>  builtin/commit.c             | 16 +++++++++++++++-
>  2 files changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
> index 1a7616c..9e3fe04 100644
> --- a/Documentation/git-commit.txt
> +++ b/Documentation/git-commit.txt
> @@ -12,7 +12,7 @@ SYNOPSIS
>  	   [--dry-run] [(-c | -C | --fixup | --squash) <commit>]
>  	   [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
>  	   [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
> -	   [--date=<date>] [--cleanup=<mode>] [--[no-]status]
> +	   [--use-mailmap] [--date=<date>] [--cleanup=<mode>] [--[no-]status]
>  	   [-i | -o] [-S[<keyid>]] [--] [<file>...]
>
>  DESCRIPTION
> @@ -131,6 +131,10 @@ OPTIONS
>  	commit by that author (i.e. rev-list --all -i --author=<author>);
>  	the commit author is then copied from the first such commit found.
>
> +--use-mailmap::
> +	When used with `--author=<author>`, match the <author> pattern
> +	against mapped name and email. See linkgit:git-shortlog[1].
> +
>  --date=<date>::
>  	Override the author date used in the commit.
>
> diff --git a/builtin/commit.c b/builtin/commit.c
> index 10acc53..fbd0664 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -30,6 +30,7 @@
>  #include "column.h"
>  #include "sequencer.h"
>  #include "notes-utils.h"
> +#include "mailmap.h"
>
>  static const char * const builtin_commit_usage[] = {
>  	N_("git commit [options] [--] <pathspec>..."),
> @@ -87,6 +88,7 @@ static enum {
>  } commit_style;
>
>  static const char *logfile, *force_author;
> +static int mailmap;
>  static const char *template_file;
>  /*
>   * The _message variables are commit names from which to take
> @@ -945,13 +947,24 @@ static const char *find_author_by_nickname(const char *name)
>  	av[++ac] = buf.buf;
>  	av[++ac] = NULL;
>  	setup_revisions(ac, av, &revs, NULL);
> +	if (mailmap) {
> +		revs.mailmap = xcalloc(1, sizeof(struct string_list));
> +		read_mailmap(revs.mailmap, NULL);
> +	}
>  	prepare_revision_walk(&revs);
>  	commit = get_revision(&revs);
>  	if (commit) {
>  		struct pretty_print_context ctx = {0};
> +		const char *format;
> +
> +		if (mailmap)
> +			format = "%aN <%aE>";
> +		else
> +			format = "%an <%ae>";
> +
>  		ctx.date_mode = DATE_NORMAL;
>  		strbuf_release(&buf);
> -		format_commit_message(commit, "%an <%ae>", &buf, &ctx);
> +		format_commit_message(commit, format, &buf, &ctx);
>  		return strbuf_detach(&buf, NULL);
>  	}
>  	die(_("No existing author found with '%s'"), name);
> @@ -1428,6 +1441,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
>  		OPT_GROUP(N_("Commit message options")),
>  		OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
>  		OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
> +		OPT_BOOLEAN(0, "use-mailmap", &mailmap, N_("Use mailmap file when searching for author")),
>  		OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
>  		OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
>  		OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
> --
> 1.8.4.rc4.1.g0d8beaa.dirty
Previous: Antoine PelisseNext: Jeff King
Message 2 of 17 in “git-commit: search author pattern against mailmap”
  1. git-commit: search author pattern against mailmapAntoine Pelisse, Aug 23, 2013
  2. Junio C HamanoAug 23, 2013
  3. Jeff KingAug 23, 2013
  4. Junio C HamanoAug 23, 2013
  5. Antoine PelisseAug 23, 2013
  6. Junio C HamanoAug 23, 2013
  7. commit: search author pattern against mailmapAntoine Pelisse, Aug 24, 2013
  8. Jeff KingAug 25, 2013
  9. Junio C HamanoAug 25, 2013
  10. Antoine PelisseAug 25, 2013
  11. commit: search author pattern against mailmapAntoine Pelisse, Aug 25, 2013
  12. Jeff KingAug 25, 2013
  13. Antoine PelisseAug 25, 2013
  14. Jeff KingAug 25, 2013
  15. Antoine PelisseAug 25, 2013
  16. Junio C HamanoAug 26, 2013
  17. Jeff KingAug 26, 2013

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.