| /* |
| * 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; |
| } |