]> git.ipfire.org Git - thirdparty/git.git/commitdiff
shortlog: remove unused(?) "repo-abbrev" feature
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 12 Jan 2021 20:18:06 +0000 (21:18 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 12 Jan 2021 22:04:42 +0000 (14:04 -0800)
Remove support for the magical "repo-abbrev" comment in .mailmap
files. This was added to .mailmap parsing in [1], as a generalized
feature of the git-shortlog Perl script added earlier in [2].

There was no documentation or tests for this feature, and I don't
think it's used in practice anymore.

What it did was to allow you to specify a single string to be
search-replaced with "/.../" in the .mailmap file. E.g. for
linux.git's current .mailmap:

    git archive --remote=git@gitlab.com:linux-kernel/linux.git \
        HEAD -- .mailmap | grep -a repo-abbrev
    # repo-abbrev: /pub/scm/linux/kernel/git/

Then when running e.g.:

    git shortlog --merges --author=Linus -1 v5.10-rc7..v5.10 | grep Merge

We'd emit (the [...] is mine):

      Merge tag [...]git://git.kernel.org/.../tip/tip

But will now emit:

      Merge tag [...]git.kernel.org/pub/scm/linux/kernel/git/tip/tip

I think at this point this is just a historical artifact we can get
rid of. It was initially meant for Linus's own use when we integrated
the Perl script[2], but since then it seems he's stopped using it.

Digging through Linus's release announcements on the LKML[3] the last
release I can find that made use of this output is Linux 2.6.25-rc6
back in March 2008[4]. Later on Linus started using --no-merges[5],
and nowadays seems to prefer some custom not-quite-shortlog format of
merges from lieutenants[6].

You will still see it on linux.git if you run "git shortlog" manually
yourself with --merges, with this removed you can still get the same
output with:

    git log --pretty=fuller v5.10-rc7..v5.10 |
    sed 's!/pub/scm/linux/kernel/git/!/.../!g' |
    git shortlog

Arguably we should do the same for the search-replacing of "[PATCH]"
at the beginning with "". That seems to be another relic of a bygone
era when linux.git patches would have their E-Mail subject lines
applied as-is by "git am" or whatever. But we documented that feature
in "git-shortlog(1)", and it seems more widely applicable than
something purely kernel-specific.

1. 7595e2ee6ef (git-shortlog: make common repository prefix
   configurable with .mailmap, 2006-11-25)
2. fa375c7f1b6 (Add git-shortlog perl script, 2005-06-04)
3. https://lore.kernel.org/lkml/
4. https://lore.kernel.org/lkml/alpine.LFD.1.00.0803161651350.3020@woody.linux-foundation.org/
5. https://lore.kernel.org/lkml/BANLkTinrbh7Xi27an3uY7pDWrNKhJRYmEA@mail.gmail.com/
6. https://lore.kernel.org/lkml/CAHk-=wg1+kf1AVzXA-RQX0zjM6t9J2Kay9xyuNqcFHWV-y5ZYw@mail.gmail.com/

Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/blame.c
builtin/check-mailmap.c
builtin/commit.c
builtin/log.c
builtin/shortlog.c
mailmap.c
mailmap.h
pretty.c
shortlog.h

index 6f7e32411a880d4cb3971ecf1c222a3a2b0da317..712ae8e74251b668e6ee8ff8198c480eab1803d0 100644 (file)
@@ -1151,7 +1151,7 @@ parse_done:
        sb.xdl_opts = xdl_opts;
        sb.no_whole_file_rename = no_whole_file_rename;
 
-       read_mailmap(&mailmap, NULL);
+       read_mailmap(&mailmap);
 
        sb.found_guilty_entry = &found_guilty_entry;
        sb.found_guilty_entry_data = &pi;
index cdce144f3b7f160f508721ed4f4afc69d683262a..7dc47e47932c7d2e76128e54f49fa2ea0c570d62 100644 (file)
@@ -47,7 +47,7 @@ int cmd_check_mailmap(int argc, const char **argv, const char *prefix)
        if (argc == 0 && !use_stdin)
                die(_("no contacts specified"));
 
-       read_mailmap(&mailmap, NULL);
+       read_mailmap(&mailmap);
 
        for (i = 0; i < argc; ++i)
                check_mailmap(&mailmap, argv[i]);
index 505fe60956db385d94aa7fd14e016a3dfeb9345c..739110c5a7f60d0d8927f7034f3b8c8cc368ea82 100644 (file)
@@ -1039,7 +1039,7 @@ static const char *find_author_by_nickname(const char *name)
        av[++ac] = NULL;
        setup_revisions(ac, av, &revs, NULL);
        revs.mailmap = &mailmap;
-       read_mailmap(revs.mailmap, NULL);
+       read_mailmap(revs.mailmap);
 
        if (prepare_revision_walk(&revs))
                die(_("revision walk setup failed"));
index bd6ff4f9f9565adb7a6fca5d93ce23d5c5636ccc..4ee81bc976d3483141b523d43623c8c4132fdddc 100644 (file)
@@ -230,7 +230,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
 
        if (mailmap) {
                rev->mailmap = xcalloc(1, sizeof(struct string_list));
-               read_mailmap(rev->mailmap, NULL);
+               read_mailmap(rev->mailmap);
        }
 
        if (rev->pretty_given && rev->commit_format == CMIT_FMT_RAW) {
index c52e4ccd19a224fd14817c640a7b740a31954479..e7c21ab62011f7d7fc74b1191d6ebfc9c79ed44f 100644 (file)
@@ -61,8 +61,7 @@ static void insert_one_record(struct shortlog *log,
        if (log->summary)
                item->util = (void *)(UTIL_TO_INT(item) + 1);
        else {
-               const char *dot3 = log->common_repo_prefix;
-               char *buffer, *p;
+               char *buffer;
                struct strbuf subject = STRBUF_INIT;
                const char *eol;
 
@@ -82,17 +81,6 @@ static void insert_one_record(struct shortlog *log,
                format_subject(&subject, oneline, " ");
                buffer = strbuf_detach(&subject, NULL);
 
-               if (dot3) {
-                       int dot3len = strlen(dot3);
-                       if (dot3len > 5) {
-                               while ((p = strstr(buffer, dot3)) != NULL) {
-                                       int taillen = strlen(p) - dot3len;
-                                       memcpy(p, "/.../", 5);
-                                       memmove(p + 5, p + dot3len, taillen + 1);
-                               }
-                       }
-               }
-
                if (item->util == NULL)
                        item->util = xcalloc(1, sizeof(struct string_list));
                string_list_append(item->util, buffer);
@@ -342,7 +330,7 @@ void shortlog_init(struct shortlog *log)
 {
        memset(log, 0, sizeof(*log));
 
-       read_mailmap(&log->mailmap, &log->common_repo_prefix);
+       read_mailmap(&log->mailmap);
 
        log->list.strdup_strings = 1;
        log->wrap = DEFAULT_WRAPLEN;
index 962fd86d6d7067e84bc0dbf499cc0c47b6ad3c11..eb77c6e77cebf517c989cb0a072e9ead77fd6350 100644 (file)
--- a/mailmap.c
+++ b/mailmap.c
@@ -143,31 +143,13 @@ static char *parse_name_and_email(char *buffer, char **name,
        return (*right == '\0' ? NULL : right);
 }
 
-static void read_mailmap_line(struct string_list *map, char *buffer,
-                             char **repo_abbrev)
+static void read_mailmap_line(struct string_list *map, char *buffer)
 {
        char *name1 = NULL, *email1 = NULL, *name2 = NULL, *email2 = NULL;
-       if (buffer[0] == '#') {
-               static const char abbrev[] = "# repo-abbrev:";
-               int abblen = sizeof(abbrev) - 1;
-               int len = strlen(buffer);
 
-               if (!repo_abbrev)
-                       return;
-
-               if (len && buffer[len - 1] == '\n')
-                       buffer[--len] = 0;
-               if (!strncmp(buffer, abbrev, abblen)) {
-                       char *cp;
-
-                       free(*repo_abbrev);
-
-                       for (cp = buffer + abblen; isspace(*cp); cp++)
-                               ; /* nothing */
-                       *repo_abbrev = xstrdup(cp);
-               }
+       if (buffer[0] == '#')
                return;
-       }
+
        if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)) != NULL)
                parse_name_and_email(name2, &name2, &email2, 1);
 
@@ -175,8 +157,7 @@ static void read_mailmap_line(struct string_list *map, char *buffer,
                add_mapping(map, name1, email1, name2, email2);
 }
 
-static int read_mailmap_file(struct string_list *map, const char *filename,
-                            char **repo_abbrev)
+static int read_mailmap_file(struct string_list *map, const char *filename)
 {
        char buffer[1024];
        FILE *f;
@@ -192,13 +173,12 @@ static int read_mailmap_file(struct string_list *map, const char *filename,
        }
 
        while (fgets(buffer, sizeof(buffer), f) != NULL)
-               read_mailmap_line(map, buffer, repo_abbrev);
+               read_mailmap_line(map, buffer);
        fclose(f);
        return 0;
 }
 
-static void read_mailmap_string(struct string_list *map, char *buf,
-                               char **repo_abbrev)
+static void read_mailmap_string(struct string_list *map, char *buf)
 {
        while (*buf) {
                char *end = strchrnul(buf, '\n');
@@ -206,14 +186,12 @@ static void read_mailmap_string(struct string_list *map, char *buf,
                if (*end)
                        *end++ = '\0';
 
-               read_mailmap_line(map, buf, repo_abbrev);
+               read_mailmap_line(map, buf);
                buf = end;
        }
 }
 
-static int read_mailmap_blob(struct string_list *map,
-                            const char *name,
-                            char **repo_abbrev)
+static int read_mailmap_blob(struct string_list *map, const char *name)
 {
        struct object_id oid;
        char *buf;
@@ -231,13 +209,13 @@ static int read_mailmap_blob(struct string_list *map,
        if (type != OBJ_BLOB)
                return error("mailmap is not a blob: %s", name);
 
-       read_mailmap_string(map, buf, repo_abbrev);
+       read_mailmap_string(map, buf);
 
        free(buf);
        return 0;
 }
 
-int read_mailmap(struct string_list *map, char **repo_abbrev)
+int read_mailmap(struct string_list *map)
 {
        int err = 0;
 
@@ -247,10 +225,10 @@ int read_mailmap(struct string_list *map, char **repo_abbrev)
        if (!git_mailmap_blob && is_bare_repository())
                git_mailmap_blob = "HEAD:.mailmap";
 
-       err |= read_mailmap_file(map, ".mailmap", repo_abbrev);
+       err |= read_mailmap_file(map, ".mailmap");
        if (startup_info->have_repository)
-               err |= read_mailmap_blob(map, git_mailmap_blob, repo_abbrev);
-       err |= read_mailmap_file(map, git_mailmap_file, repo_abbrev);
+               err |= read_mailmap_blob(map, git_mailmap_blob);
+       err |= read_mailmap_file(map, git_mailmap_file);
        return err;
 }
 
index d0e65646cb57e60aa9021c0d8754c6844199acb8..7e99fccb46c92e012fa32fafb6ed27c217fdcc4d 100644 (file)
--- a/mailmap.h
+++ b/mailmap.h
@@ -3,7 +3,7 @@
 
 struct string_list;
 
-int read_mailmap(struct string_list *map, char **repo_abbrev);
+int read_mailmap(struct string_list *map);
 void clear_mailmap(struct string_list *map);
 
 int map_user(struct string_list *map,
index 05eef7fda0b6e3f003e9df7e261baba0590ed00c..3922f6f9f2490a44a1bc84e2a4ef7278f6a228a7 100644 (file)
--- a/pretty.c
+++ b/pretty.c
@@ -679,7 +679,7 @@ static int mailmap_name(const char **email, size_t *email_len,
        static struct string_list *mail_map;
        if (!mail_map) {
                mail_map = xcalloc(1, sizeof(*mail_map));
-               read_mailmap(mail_map, NULL);
+               read_mailmap(mail_map);
        }
        return mail_map->nr && map_user(mail_map, email, email_len, name, name_len);
 }
index 64be879b241b1bd3daf8d5a30cf736f98211e745..3f7e9aabcaef4b1ff2e5a5122cbea8bc97a6b7d5 100644 (file)
@@ -23,7 +23,6 @@ struct shortlog {
        } groups;
        struct string_list trailers;
 
-       char *common_repo_prefix;
        int email;
        struct string_list mailmap;
        FILE *file;