summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7c1c678)
raw | patch | inline | side by side (parent: 7c1c678)
author | Junio C Hamano <junkio@cox.net> | |
Fri, 27 Apr 2007 07:42:15 +0000 (00:42 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sun, 29 Apr 2007 09:05:06 +0000 (02:05 -0700) |
This makes git-blame to use the same mailmap used by
git-shortlog.
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-shortlog.
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-blame.c | patch | blob | history |
diff --git a/builtin-blame.c b/builtin-blame.c
index de80311036c1c63f3b7cf268d82b705520dde417..682edba9e570a1f65298b28681f39aa575e14ee7 100644 (file)
--- a/builtin-blame.c
+++ b/builtin-blame.c
#include "quote.h"
#include "xdiff-interface.h"
#include "cache-tree.h"
+#include "path-list.h"
+#include "mailmap.h"
static char blame_usage[] =
-"git-blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-p] [-L n,m] [-S <revs-file>] [-M] [-C] [-C] [--contents <filename>] [--incremental] [commit] [--] file\n"
+"git-blame [-c] [-b] [-l] [--root] [-x] [-t] [-f] [-n] [-s] [-p] [-L n,m] [-S <revs-file>] [-M] [-C] [-C] [--contents <filename>] [--incremental] [commit] [--] file\n"
" -c Use the same output mode as git-annotate (Default: off)\n"
" -b Show blank SHA-1 for boundary commits (Default: off)\n"
" -l Show long commit SHA1 (Default: off)\n"
" --root Do not treat root commits as boundaries (Default: off)\n"
" -t Show raw timestamp (Default: off)\n"
+" -x Do not use .mailmap file\n"
" -f, --show-name Show original filename (Default: auto)\n"
" -n, --show-number Show original linenumber (Default: off)\n"
" -s Suppress author name and timestamp (Default: off)\n"
static int blank_boundary;
static int incremental;
static int cmd_is_annotate;
+static int no_mailmap;
+static struct path_list mailmap;
#ifndef DEBUG
#define DEBUG 0
int bufsz, char *person, const char **mail,
unsigned long *time, const char **tz)
{
- int len;
- char *tmp, *endp;
+ int len, tzlen, maillen;
+ char *tmp, *endp, *timepos;
tmp = strstr(inbuf, what);
if (!tmp)
while (*tmp != ' ')
tmp--;
*tz = tmp+1;
+ tzlen = (person+len)-(tmp+1);
*tmp = 0;
while (*tmp != ' ')
tmp--;
*time = strtoul(tmp, NULL, 10);
+ timepos = tmp;
*tmp = 0;
while (*tmp != ' ')
tmp--;
*mail = tmp + 1;
*tmp = 0;
+ maillen = timepos - tmp;
+
+ if (!mailmap.nr)
+ return;
+
+ /*
+ * mailmap expansion may make the name longer.
+ * make room by pushing stuff down.
+ */
+ tmp = person + bufsz - (tzlen + 1);
+ memmove(tmp, *tz, tzlen);
+ tmp[tzlen] = 0;
+ *tz = tmp;
+
+ tmp = tmp - (maillen + 1);
+ memmove(tmp, *mail, maillen);
+ tmp[maillen] = 0;
+ *mail = tmp;
+
+ /*
+ * Now, convert e-mail using mailmap
+ */
+ map_email(&mailmap, tmp + 1, person, tmp-person-1);
}
static void get_commit_info(struct commit *commit,
else if (!strcmp("-p", arg) ||
!strcmp("--porcelain", arg))
output_option |= OUTPUT_PORCELAIN;
+ else if (!strcmp("-x", arg) ||
+ !strcmp("--no-mailmap", arg))
+ no_mailmap = 1;
else if (!strcmp("--", arg)) {
seen_dashdash = 1;
i++;
die("reading graft file %s failed: %s",
revs_file, strerror(errno));
+ if (!no_mailmap && !access(".mailmap", R_OK))
+ read_mailmap(&mailmap, ".mailmap", NULL);
+
assign_blame(&sb, &revs, opt);
if (incremental)