зеркало из https://github.com/microsoft/git.git
shortlog: remove unused(?) "repo-abbrev" feature
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.7595e2ee6e
(git-shortlog: make common repository prefix configurable with .mailmap, 2006-11-25) 2.fa375c7f1b
(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>
This commit is contained in:
Родитель
238803cb40
Коммит
4e168333a8
|
@ -1151,7 +1151,7 @@ parse_done:
|
||||||
sb.xdl_opts = xdl_opts;
|
sb.xdl_opts = xdl_opts;
|
||||||
sb.no_whole_file_rename = no_whole_file_rename;
|
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 = &found_guilty_entry;
|
||||||
sb.found_guilty_entry_data = π
|
sb.found_guilty_entry_data = π
|
||||||
|
|
|
@ -47,7 +47,7 @@ int cmd_check_mailmap(int argc, const char **argv, const char *prefix)
|
||||||
if (argc == 0 && !use_stdin)
|
if (argc == 0 && !use_stdin)
|
||||||
die(_("no contacts specified"));
|
die(_("no contacts specified"));
|
||||||
|
|
||||||
read_mailmap(&mailmap, NULL);
|
read_mailmap(&mailmap);
|
||||||
|
|
||||||
for (i = 0; i < argc; ++i)
|
for (i = 0; i < argc; ++i)
|
||||||
check_mailmap(&mailmap, argv[i]);
|
check_mailmap(&mailmap, argv[i]);
|
||||||
|
|
|
@ -1039,7 +1039,7 @@ static const char *find_author_by_nickname(const char *name)
|
||||||
av[++ac] = NULL;
|
av[++ac] = NULL;
|
||||||
setup_revisions(ac, av, &revs, NULL);
|
setup_revisions(ac, av, &revs, NULL);
|
||||||
revs.mailmap = &mailmap;
|
revs.mailmap = &mailmap;
|
||||||
read_mailmap(revs.mailmap, NULL);
|
read_mailmap(revs.mailmap);
|
||||||
|
|
||||||
if (prepare_revision_walk(&revs))
|
if (prepare_revision_walk(&revs))
|
||||||
die(_("revision walk setup failed"));
|
die(_("revision walk setup failed"));
|
||||||
|
|
|
@ -230,7 +230,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
|
||||||
|
|
||||||
if (mailmap) {
|
if (mailmap) {
|
||||||
rev->mailmap = xcalloc(1, sizeof(struct string_list));
|
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) {
|
if (rev->pretty_given && rev->commit_format == CMIT_FMT_RAW) {
|
||||||
|
|
|
@ -61,8 +61,7 @@ static void insert_one_record(struct shortlog *log,
|
||||||
if (log->summary)
|
if (log->summary)
|
||||||
item->util = (void *)(UTIL_TO_INT(item) + 1);
|
item->util = (void *)(UTIL_TO_INT(item) + 1);
|
||||||
else {
|
else {
|
||||||
const char *dot3 = log->common_repo_prefix;
|
char *buffer;
|
||||||
char *buffer, *p;
|
|
||||||
struct strbuf subject = STRBUF_INIT;
|
struct strbuf subject = STRBUF_INIT;
|
||||||
const char *eol;
|
const char *eol;
|
||||||
|
|
||||||
|
@ -82,17 +81,6 @@ static void insert_one_record(struct shortlog *log,
|
||||||
format_subject(&subject, oneline, " ");
|
format_subject(&subject, oneline, " ");
|
||||||
buffer = strbuf_detach(&subject, NULL);
|
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)
|
if (item->util == NULL)
|
||||||
item->util = xcalloc(1, sizeof(struct string_list));
|
item->util = xcalloc(1, sizeof(struct string_list));
|
||||||
string_list_append(item->util, buffer);
|
string_list_append(item->util, buffer);
|
||||||
|
@ -342,7 +330,7 @@ void shortlog_init(struct shortlog *log)
|
||||||
{
|
{
|
||||||
memset(log, 0, sizeof(*log));
|
memset(log, 0, sizeof(*log));
|
||||||
|
|
||||||
read_mailmap(&log->mailmap, &log->common_repo_prefix);
|
read_mailmap(&log->mailmap);
|
||||||
|
|
||||||
log->list.strdup_strings = 1;
|
log->list.strdup_strings = 1;
|
||||||
log->wrap = DEFAULT_WRAPLEN;
|
log->wrap = DEFAULT_WRAPLEN;
|
||||||
|
|
48
mailmap.c
48
mailmap.c
|
@ -143,31 +143,13 @@ static char *parse_name_and_email(char *buffer, char **name,
|
||||||
return (*right == '\0' ? NULL : right);
|
return (*right == '\0' ? NULL : right);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void read_mailmap_line(struct string_list *map, char *buffer,
|
static void read_mailmap_line(struct string_list *map, char *buffer)
|
||||||
char **repo_abbrev)
|
|
||||||
{
|
{
|
||||||
char *name1 = NULL, *email1 = NULL, *name2 = NULL, *email2 = NULL;
|
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)
|
if (buffer[0] == '#')
|
||||||
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);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)) != NULL)
|
if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)) != NULL)
|
||||||
parse_name_and_email(name2, &name2, &email2, 1);
|
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);
|
add_mapping(map, name1, email1, name2, email2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_mailmap_file(struct string_list *map, const char *filename,
|
static int read_mailmap_file(struct string_list *map, const char *filename)
|
||||||
char **repo_abbrev)
|
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
FILE *f;
|
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)
|
while (fgets(buffer, sizeof(buffer), f) != NULL)
|
||||||
read_mailmap_line(map, buffer, repo_abbrev);
|
read_mailmap_line(map, buffer);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void read_mailmap_string(struct string_list *map, char *buf,
|
static void read_mailmap_string(struct string_list *map, char *buf)
|
||||||
char **repo_abbrev)
|
|
||||||
{
|
{
|
||||||
while (*buf) {
|
while (*buf) {
|
||||||
char *end = strchrnul(buf, '\n');
|
char *end = strchrnul(buf, '\n');
|
||||||
|
@ -206,14 +186,12 @@ static void read_mailmap_string(struct string_list *map, char *buf,
|
||||||
if (*end)
|
if (*end)
|
||||||
*end++ = '\0';
|
*end++ = '\0';
|
||||||
|
|
||||||
read_mailmap_line(map, buf, repo_abbrev);
|
read_mailmap_line(map, buf);
|
||||||
buf = end;
|
buf = end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_mailmap_blob(struct string_list *map,
|
static int read_mailmap_blob(struct string_list *map, const char *name)
|
||||||
const char *name,
|
|
||||||
char **repo_abbrev)
|
|
||||||
{
|
{
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
@ -231,13 +209,13 @@ static int read_mailmap_blob(struct string_list *map,
|
||||||
if (type != OBJ_BLOB)
|
if (type != OBJ_BLOB)
|
||||||
return error("mailmap is not a blob: %s", name);
|
return error("mailmap is not a blob: %s", name);
|
||||||
|
|
||||||
read_mailmap_string(map, buf, repo_abbrev);
|
read_mailmap_string(map, buf);
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_mailmap(struct string_list *map, char **repo_abbrev)
|
int read_mailmap(struct string_list *map)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
|
@ -247,10 +225,10 @@ int read_mailmap(struct string_list *map, char **repo_abbrev)
|
||||||
if (!git_mailmap_blob && is_bare_repository())
|
if (!git_mailmap_blob && is_bare_repository())
|
||||||
git_mailmap_blob = "HEAD:.mailmap";
|
git_mailmap_blob = "HEAD:.mailmap";
|
||||||
|
|
||||||
err |= read_mailmap_file(map, ".mailmap", repo_abbrev);
|
err |= read_mailmap_file(map, ".mailmap");
|
||||||
if (startup_info->have_repository)
|
if (startup_info->have_repository)
|
||||||
err |= read_mailmap_blob(map, git_mailmap_blob, repo_abbrev);
|
err |= read_mailmap_blob(map, git_mailmap_blob);
|
||||||
err |= read_mailmap_file(map, git_mailmap_file, repo_abbrev);
|
err |= read_mailmap_file(map, git_mailmap_file);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
struct string_list;
|
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);
|
void clear_mailmap(struct string_list *map);
|
||||||
|
|
||||||
int map_user(struct string_list *map,
|
int map_user(struct string_list *map,
|
||||||
|
|
2
pretty.c
2
pretty.c
|
@ -679,7 +679,7 @@ static int mailmap_name(const char **email, size_t *email_len,
|
||||||
static struct string_list *mail_map;
|
static struct string_list *mail_map;
|
||||||
if (!mail_map) {
|
if (!mail_map) {
|
||||||
mail_map = xcalloc(1, sizeof(*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);
|
return mail_map->nr && map_user(mail_map, email, email_len, name, name_len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ struct shortlog {
|
||||||
} groups;
|
} groups;
|
||||||
struct string_list trailers;
|
struct string_list trailers;
|
||||||
|
|
||||||
char *common_repo_prefix;
|
|
||||||
int email;
|
int email;
|
||||||
struct string_list mailmap;
|
struct string_list mailmap;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче