This is useful when scripts need more than just the basic email headers to parse. By specifying the "-x=" option, one can search and output any header field they want. Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx> --- Accidentally sent out the wrong patch yesterday. --- builtin-mailinfo.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-) diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index a5eea82..8ac6ef4 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -302,7 +302,7 @@ static int check_header(char *line, char **hdr_data) int i; /* search for the interesting parts */ - for (i = 0; header[i]; i++) { + for (i = 0; header[i] && i < MAX_HDR_PARSED; i++) { int len = strlen(header[i]); if (!hdr_data[i] && !strncasecmp(line, header[i], len) && @@ -338,8 +338,8 @@ static int check_header(char *line, char **hdr_data) if (!memcmp(">From", line, 5) && isspace(line[5])) return 1; if (!memcmp("[PATCH]", line, 7) && isspace(line[7])) { - for (i = 0; header[i]; i++) { - if (!memcmp("Subject: ", header[i], 9)) { + for (i = 0; header[i] && i < MAX_HDR_PARSED; i++) { + if (!memcmp("Subject", header[i], 7)) { if (! handle_header(line, hdr_data[i], 0)) { return 1; } @@ -796,7 +796,7 @@ static void handle_info(void) char *hdr; int i; - for (i = 0; header[i]; i++) { + for (i = 0; header[i] && i < MAX_HDR_PARSED; i++) { /* only print inbody headers if we output a patch file */ if (patch_lines && s_hdr_data[i]) @@ -856,11 +856,12 @@ int mailinfo(FILE *in, FILE *out, int ks, const char *encoding, } static const char mailinfo_usage[] = - "git-mailinfo [-k] [-u | --encoding=<encoding>] msg patch <mail >info"; + "git-mailinfo [-k] [-u | --encoding=<encoding>] [-x=<field>] msg patch <mail >info"; int cmd_mailinfo(int argc, const char **argv, const char *prefix) { const char *def_charset; + int top; /* NEEDSWORK: might want to do the optional .git/ directory * discovery @@ -870,6 +871,8 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) def_charset = (git_commit_encoding ? git_commit_encoding : "utf-8"); metainfo_charset = def_charset; + for (top = 0; header[top] && top < MAX_HDR_PARSED; top++){ ; } + while (1 < argc && argv[1][0] == '-') { if (!strcmp(argv[1], "-k")) keep_subject = 1; @@ -879,7 +882,14 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) metainfo_charset = NULL; else if (!prefixcmp(argv[1], "--encoding=")) metainfo_charset = argv[1] + 11; - else + else if (!prefixcmp(argv[1], "-x=")) { + if (top >= MAX_HDR_PARSED) { + fprintf(stderr, "too many headers to parse\n"); + exit(1); + } + header[top] = xmalloc(256*sizeof(char)); + strncpy(header[top++], argv[1]+3, 256); + } else usage(mailinfo_usage); argc--; argv++; } -- 1.5.0.2.213.g18c8-dirty - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html