summaryrefslogtreecommitdiff
path: root/builtin-shortlog.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-11-25 00:07:54 -0800
committerJunio C Hamano <junkio@cox.net>2006-11-25 00:07:54 -0800
commit7595e2ee6ef9b35ebc8dc45543723e1d89765ce3 (patch)
tree2e4c146d59d73a22d0eef9453c9ddcdb0eeece87 /builtin-shortlog.c
parentc95044d4f3c98b52f16e32cfe09f3ff988a80d2a (diff)
downloadgit-7595e2ee6ef9b35ebc8dc45543723e1d89765ce3.tar.gz
git-shortlog: make common repository prefix configurable with .mailmap
The code had "/pub/scm/linux/kernel/git/" hardcoded which was too specific to the kernel project. With this, a line in the .mailmap file: # repo-abbrev: /pub/scm/linux/kernel/git/ can be used to cause the substring to be abbreviated to /.../ on the title line of the commit message. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-shortlog.c')
-rw-r--r--builtin-shortlog.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/builtin-shortlog.c b/builtin-shortlog.c
index bdd952c252..b5b13dee3b 100644
--- a/builtin-shortlog.c
+++ b/builtin-shortlog.c
@@ -9,6 +9,8 @@
static const char shortlog_usage[] =
"git-shortlog [-n] [-s] [<commit-id>... ]";
+static char *common_repo_prefix;
+
static int compare_by_number(const void *a1, const void *a2)
{
const struct path_list_item *i1 = a1, *i2 = a2;
@@ -35,8 +37,26 @@ static int read_mailmap(const char *filename)
char *end_of_name, *left_bracket, *right_bracket;
char *name, *email;
int i;
- if (buffer[0] == '#')
+ if (buffer[0] == '#') {
+ static const char abbrev[] = "# repo-abbrev:";
+ int abblen = sizeof(abbrev) - 1;
+ int len = strlen(buffer);
+
+ if (len && buffer[len - 1] == '\n')
+ buffer[--len] = 0;
+ if (!strncmp(buffer, abbrev, abblen)) {
+ char *cp;
+
+ if (common_repo_prefix)
+ free(common_repo_prefix);
+ common_repo_prefix = xmalloc(len);
+
+ for (cp = buffer + abblen; isspace(*cp); cp++)
+ ; /* nothing */
+ strcpy(common_repo_prefix, cp);
+ }
continue;
+ }
if ((left_bracket = strchr(buffer, '<')) == NULL)
continue;
if ((right_bracket = strchr(left_bracket + 1, '>')) == NULL)
@@ -87,7 +107,7 @@ static void insert_author_oneline(struct path_list *list,
const char *author, int authorlen,
const char *oneline, int onelinelen)
{
- const char *dot3 = "/pub/scm/linux/kernel/git/";
+ const char *dot3 = common_repo_prefix;
char *buffer, *p;
struct path_list_item *item;
struct path_list *onelines;