commit: search author pattern against mailmap
"git commit --author=$name" sets the author to one whose name matches the given string from existing commits, when $name is not in the "Name <e-mail>" format. However, it does not honor the mailmap to use the canonical name for the author found this way. Fix it by telling the logic to find a matching existing author to honor the mailmap, and use the name and email after applying the mailmap. Signed-off-by: Antoine Pelisse <apelisse@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0d8beaa5b7
commit
ea16794e43
@ -30,6 +30,7 @@
|
|||||||
#include "column.h"
|
#include "column.h"
|
||||||
#include "sequencer.h"
|
#include "sequencer.h"
|
||||||
#include "notes-utils.h"
|
#include "notes-utils.h"
|
||||||
|
#include "mailmap.h"
|
||||||
|
|
||||||
static const char * const builtin_commit_usage[] = {
|
static const char * const builtin_commit_usage[] = {
|
||||||
N_("git commit [options] [--] <pathspec>..."),
|
N_("git commit [options] [--] <pathspec>..."),
|
||||||
@ -935,6 +936,7 @@ static const char *find_author_by_nickname(const char *name)
|
|||||||
struct rev_info revs;
|
struct rev_info revs;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
struct string_list mailmap = STRING_LIST_INIT_NODUP;
|
||||||
const char *av[20];
|
const char *av[20];
|
||||||
int ac = 0;
|
int ac = 0;
|
||||||
|
|
||||||
@ -945,13 +947,17 @@ static const char *find_author_by_nickname(const char *name)
|
|||||||
av[++ac] = buf.buf;
|
av[++ac] = buf.buf;
|
||||||
av[++ac] = NULL;
|
av[++ac] = NULL;
|
||||||
setup_revisions(ac, av, &revs, NULL);
|
setup_revisions(ac, av, &revs, NULL);
|
||||||
|
revs.mailmap = &mailmap;
|
||||||
|
read_mailmap(revs.mailmap, NULL);
|
||||||
|
|
||||||
prepare_revision_walk(&revs);
|
prepare_revision_walk(&revs);
|
||||||
commit = get_revision(&revs);
|
commit = get_revision(&revs);
|
||||||
if (commit) {
|
if (commit) {
|
||||||
struct pretty_print_context ctx = {0};
|
struct pretty_print_context ctx = {0};
|
||||||
ctx.date_mode = DATE_NORMAL;
|
ctx.date_mode = DATE_NORMAL;
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
format_commit_message(commit, "%an <%ae>", &buf, &ctx);
|
format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
|
||||||
|
clear_mailmap(&mailmap);
|
||||||
return strbuf_detach(&buf, NULL);
|
return strbuf_detach(&buf, NULL);
|
||||||
}
|
}
|
||||||
die(_("No existing author found with '%s'"), name);
|
die(_("No existing author found with '%s'"), name);
|
||||||
|
@ -470,4 +470,15 @@ test_expect_success 'Blame output (complex mapping)' '
|
|||||||
test_cmp expect actual.fuzz
|
test_cmp expect actual.fuzz
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat >expect <<\EOF
|
||||||
|
Some Dude <some@dude.xx>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'commit --author honors mailmap' '
|
||||||
|
test_must_fail git commit --author "nick" --allow-empty -meight &&
|
||||||
|
git commit --author "Some Dude" --allow-empty -meight &&
|
||||||
|
git show --pretty=format:"%an <%ae>%n" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user