/* * Another stupid program, this one parsing the headers of an * email to figure out authorship and subject */ #include "cache.h" #include "builtin.h" #include "utf8.h" #include "strbuf.h" #include "mailinfo.h" static const char mailinfo_usage[] = "git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info"; int cmd_mailinfo(int argc, const char **argv, const char *prefix) { const char *def_charset; struct mailinfo mi; int status; char *msgfile, *patchfile; setup_mailinfo(&mi); def_charset = get_commit_output_encoding(); mi.metainfo_charset = def_charset; while (1 < argc && argv[1][0] == '-') { if (!strcmp(argv[1], "-k")) mi.keep_subject = 1; else if (!strcmp(argv[1], "-b")) mi.keep_non_patch_brackets_in_subject = 1; else if (!strcmp(argv[1], "-m") || !strcmp(argv[1], "--message-id")) mi.add_message_id = 1; else if (!strcmp(argv[1], "-u")) mi.metainfo_charset = def_charset; else if (!strcmp(argv[1], "-n")) mi.metainfo_charset = NULL; else if (starts_with(argv[1], "--encoding=")) mi.metainfo_charset = argv[1] + 11; else if (!strcmp(argv[1], "--scissors")) mi.use_scissors = 1; else if (!strcmp(argv[1], "--no-scissors")) mi.use_scissors = 0; else if (!strcmp(argv[1], "--no-inbody-headers")) mi.use_inbody_headers = 0; else usage(mailinfo_usage); argc--; argv++; } if (argc != 3) usage(mailinfo_usage); mi.input = stdin; mi.output = stdout; msgfile = prefix_filename(prefix, argv[1]); patchfile = prefix_filename(prefix, argv[2]); status = !!mailinfo(&mi, msgfile, patchfile); clear_mailinfo(&mi); free(msgfile); free(patchfile); return status; }