int git_read_mailmap(GIT_MAILMAP *mailmap) { struct string_list *map; int result; if (!mailmap) return -1; *mailmap = NULL; if ((map = (struct string_list *)calloc(1, sizeof(struct string_list))) == NULL) return -1; if ((result = read_mailmap(map, NULL)) != 0) { clear_mailmap(map); free(map); return result; } if (!map->items) { clear_mailmap(map); free(map); return -1; } *mailmap = map; return 0; }
static const char *find_author_by_nickname(const char *name) { struct rev_info revs; struct commit *commit; struct strbuf buf = STRBUF_INIT; struct string_list mailmap = STRING_LIST_INIT_NODUP; const char *av[20]; int ac = 0; init_revisions(&revs, NULL); strbuf_addf(&buf, "--author=%s", name); av[++ac] = "--all"; av[++ac] = "-i"; av[++ac] = buf.buf; av[++ac] = NULL; setup_revisions(ac, av, &revs, NULL); revs.mailmap = &mailmap; read_mailmap(revs.mailmap, NULL); prepare_revision_walk(&revs); commit = get_revision(&revs); if (commit) { struct pretty_print_context ctx = {0}; ctx.date_mode = DATE_NORMAL; strbuf_release(&buf); format_commit_message(commit, "%aN <%aE>", &buf, &ctx); clear_mailmap(&mailmap); return strbuf_detach(&buf, NULL); } die(_("No existing author found with '%s'"), name); }
int cmd_check_mailmap(int argc, const char **argv, const char *prefix) { int i; struct string_list mailmap = STRING_LIST_INIT_NODUP; git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, check_mailmap_options, check_mailmap_usage, 0); if (argc == 0 && !use_stdin) die(_("no contacts specified")); read_mailmap(&mailmap, NULL); for (i = 0; i < argc; ++i) check_mailmap(&mailmap, argv[i]); maybe_flush_or_die(stdout, "stdout"); if (use_stdin) { struct strbuf buf = STRBUF_INIT; while (strbuf_getline_lf(&buf, stdin) != EOF) { check_mailmap(&mailmap, buf.buf); maybe_flush_or_die(stdout, "stdout"); } strbuf_release(&buf); } clear_mailmap(&mailmap); return 0; }
void git_free_mailmap(GIT_MAILMAP mailmap) { if (!mailmap) return; clear_mailmap((struct string_list *)mailmap); free(mailmap); }
void shortlog_output(struct shortlog *log) { int i, j; struct strbuf sb = STRBUF_INIT; if (log->sort_by_number) QSORT(log->list.items, log->list.nr, log->summary ? compare_by_counter : compare_by_list); for (i = 0; i < log->list.nr; i++) { const struct string_list_item *item = &log->list.items[i]; if (log->summary) { fprintf(log->file, "%6d\t%s\n", (int)UTIL_TO_INT(item), item->string); } else { struct string_list *onelines = item->util; fprintf(log->file, "%s (%d):\n", item->string, onelines->nr); for (j = onelines->nr - 1; j >= 0; j--) { const char *msg = onelines->items[j].string; if (log->wrap_lines) { strbuf_reset(&sb); add_wrapped_shortlog_msg(&sb, msg, log); fwrite(sb.buf, sb.len, 1, log->file); } else fprintf(log->file, " %s\n", msg); } putc('\n', log->file); onelines->strdup_strings = 1; string_list_clear(onelines, 0); free(onelines); } log->list.items[i].util = NULL; } strbuf_release(&sb); log->list.strdup_strings = 1; string_list_clear(&log->list, 1); clear_mailmap(&log->mailmap); }
void shortlog_output(struct shortlog *log) { int i, j; struct strbuf sb = STRBUF_INIT; if (log->sort_by_number) qsort(log->list.items, log->list.nr, sizeof(struct string_list_item), compare_by_number); for (i = 0; i < log->list.nr; i++) { struct string_list *onelines = log->list.items[i].util; if (log->summary) { printf("%6d\t%s\n", onelines->nr, log->list.items[i].string); } else { printf("%s (%d):\n", log->list.items[i].string, onelines->nr); for (j = onelines->nr - 1; j >= 0; j--) { const char *msg = onelines->items[j].string; if (log->wrap_lines) { strbuf_reset(&sb); add_wrapped_shortlog_msg(&sb, msg, log); fwrite(sb.buf, sb.len, 1, stdout); } else printf(" %s\n", msg); } putchar('\n'); } onelines->strdup_strings = 1; string_list_clear(onelines, 0); free(onelines); log->list.items[i].util = NULL; } strbuf_release(&sb); log->list.strdup_strings = 1; string_list_clear(&log->list, 1); clear_mailmap(&log->mailmap); }
void shortlog_output(struct shortlog *log) { int i, j; if (log->sort_by_number) qsort(log->list.items, log->list.nr, sizeof(struct string_list_item), compare_by_number); for (i = 0; i < log->list.nr; i++) { struct string_list *onelines = log->list.items[i].util; if (log->summary) { printf("%6d\t%s\n", onelines->nr, log->list.items[i].string); } else { printf("%s (%d):\n", log->list.items[i].string, onelines->nr); for (j = onelines->nr - 1; j >= 0; j--) { const char *msg = onelines->items[j].string; if (log->wrap_lines) { int col = print_wrapped_text(msg, log->in1, log->in2, log->wrap); if (col != log->wrap) putchar('\n'); } else printf(" %s\n", msg); } putchar('\n'); } onelines->strdup_strings = 1; string_list_clear(onelines, 0); free(onelines); log->list.items[i].util = NULL; } log->list.strdup_strings = 1; string_list_clear(&log->list, 1); clear_mailmap(&log->mailmap); }