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:

committed by
Junio C Hamano

parent
9f23e04061
commit
c88098d7f1
@ -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;
|
||||
|
Reference in New Issue
Block a user