mailsplit: support unescaping mboxrd messages

This will allow us to parse the output of --pretty=mboxrd
and the output of other mboxrd generators.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Eric Wong
2016-06-05 04:46:40 +00:00
committed by Junio C Hamano
parent 9f23e04061
commit c88098d7f1
6 changed files with 83 additions and 1 deletions

View File

@ -45,6 +45,19 @@ static int is_from_line(const char *line, int len)
static struct strbuf buf = STRBUF_INIT;
static int keep_cr;
static int mboxrd;
static int is_gtfrom(const struct strbuf *buf)
{
size_t min = strlen(">From ");
size_t ngt;
if (buf->len < min)
return 0;
ngt = strspn(buf->buf, ">");
return ngt && starts_with(buf->buf + ngt, "From ");
}
/* Called with the first line (potentially partial)
* already in buf[] -- normally that should begin with
@ -77,6 +90,9 @@ static int split_one(FILE *mbox, const char *name, int allow_bare)
strbuf_addch(&buf, '\n');
}
if (mboxrd && is_gtfrom(&buf))
strbuf_remove(&buf, 0, 1);
if (fwrite(buf.buf, 1, buf.len, output) != buf.len)
die_errno("cannot write output");
@ -271,6 +287,8 @@ int cmd_mailsplit(int argc, const char **argv, const char *prefix)
keep_cr = 1;
} else if ( arg[1] == 'o' && arg[2] ) {
dir = arg+2;
} else if (!strcmp(arg, "--mboxrd")) {
mboxrd = 1;
} else if ( arg[1] == '-' && !arg[2] ) {
argp++; /* -- marks end of options */
break;