From: Antoine Pelisse <apelisse@gmail.com>
To: git@vger.kernel.org
Cc: Antoine Pelisse <apelisse@gmail.com>
Subject: [PATCH] git-commit: search author pattern against mailmap
Date: Fri, 23 Aug 2013 15:48:31 +0200 [thread overview]
Message-ID: <1377265711-11492-1-git-send-email-apelisse@gmail.com> (raw)
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.
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
next reply other threads:[~2013-08-23 13:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-23 13:48 Antoine Pelisse [this message]
2013-08-23 17:44 ` [PATCH] git-commit: search author pattern against mailmap Junio C Hamano
2013-08-23 18:35 ` Jeff King
2013-08-23 19:03 ` Junio C Hamano
2013-08-23 19:47 ` Antoine Pelisse
2013-08-23 20:44 ` Junio C Hamano
2013-08-24 14:07 ` [PATCH] commit: " Antoine Pelisse
2013-08-25 4:01 ` Jeff King
2013-08-25 5:16 ` Junio C Hamano
2013-08-25 9:47 ` Antoine Pelisse
2013-08-25 10:01 ` Antoine Pelisse
2013-08-25 10:30 ` Jeff King
2013-08-25 13:37 ` Antoine Pelisse
2013-08-25 16:51 ` Jeff King
2013-08-25 20:42 ` Antoine Pelisse
2013-08-26 5:27 ` Junio C Hamano
2013-08-26 21:38 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1377265711-11492-1-git-send-email-apelisse@gmail.com \
--to=apelisse@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).