You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.7 KiB
65 lines
1.7 KiB
/* |
|
* 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; |
|
}
|
|
|