mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
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:
parent
9f23e04061
commit
c88098d7f1
@ -8,7 +8,8 @@ git-mailsplit - Simple UNIX mbox splitter program
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git mailsplit' [-b] [-f<nn>] [-d<prec>] [--keep-cr] -o<directory> [--] [(<mbox>|<Maildir>)...]
|
||||
'git mailsplit' [-b] [-f<nn>] [-d<prec>] [--keep-cr] [--mboxrd]
|
||||
-o<directory> [--] [(<mbox>|<Maildir>)...]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -47,6 +48,10 @@ OPTIONS
|
||||
--keep-cr::
|
||||
Do not remove `\r` from lines ending with `\r\n`.
|
||||
|
||||
--mboxrd::
|
||||
Input is of the "mboxrd" format and "^>+From " line escaping is
|
||||
reversed.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the linkgit:git[1] suite
|
||||
|
@ -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;
|
||||
|
@ -111,4 +111,35 @@ test_expect_success 'mailinfo on message with quoted >From' '
|
||||
test_cmp "$TEST_DIRECTORY"/t5100/quoted-from.expect quoted-from/msg
|
||||
'
|
||||
|
||||
test_expect_success 'mailinfo unescapes with --mboxrd' '
|
||||
mkdir mboxrd &&
|
||||
git mailsplit -omboxrd --mboxrd \
|
||||
"$TEST_DIRECTORY"/t5100/sample.mboxrd >last &&
|
||||
test x"$(cat last)" = x2 &&
|
||||
for i in 0001 0002
|
||||
do
|
||||
git mailinfo mboxrd/msg mboxrd/patch \
|
||||
<mboxrd/$i >mboxrd/out &&
|
||||
test_cmp "$TEST_DIRECTORY"/t5100/${i}mboxrd mboxrd/msg
|
||||
done &&
|
||||
sp=" " &&
|
||||
echo "From " >expect &&
|
||||
echo "From " >>expect &&
|
||||
echo >> expect &&
|
||||
cat >sp <<-INPUT_END &&
|
||||
From mboxrd Mon Sep 17 00:00:00 2001
|
||||
From: trailing spacer <sp@example.com>
|
||||
Subject: [PATCH] a commit with trailing space
|
||||
|
||||
From$sp
|
||||
>From$sp
|
||||
|
||||
INPUT_END
|
||||
|
||||
git mailsplit -f2 -omboxrd --mboxrd <sp >last &&
|
||||
test x"$(cat last)" = x1 &&
|
||||
git mailinfo mboxrd/msg mboxrd/patch <mboxrd/0003 &&
|
||||
test_cmp expect mboxrd/msg
|
||||
'
|
||||
|
||||
test_done
|
||||
|
4
t/t5100/0001mboxrd
Normal file
4
t/t5100/0001mboxrd
Normal file
@ -0,0 +1,4 @@
|
||||
From the beginning, mbox should have been mboxrd
|
||||
>From escaped
|
||||
From not mangled but this line should have been escaped
|
||||
|
5
t/t5100/0002mboxrd
Normal file
5
t/t5100/0002mboxrd
Normal file
@ -0,0 +1,5 @@
|
||||
>From unchanged
|
||||
From also unchanged
|
||||
no trailing space, no escaping necessary and '>' was intended:
|
||||
>From
|
||||
|
19
t/t5100/sample.mboxrd
Normal file
19
t/t5100/sample.mboxrd
Normal file
@ -0,0 +1,19 @@
|
||||
From mboxrd Mon Sep 17 00:00:00 2001
|
||||
From: mboxrd writer <mboxrd@example.com>
|
||||
Date: Fri, 9 Jun 2006 00:44:16 -0700
|
||||
Subject: [PATCH] a commit with escaped From lines
|
||||
|
||||
>From the beginning, mbox should have been mboxrd
|
||||
>>From escaped
|
||||
From not mangled but this line should have been escaped
|
||||
|
||||
From mboxrd Mon Sep 17 00:00:00 2001
|
||||
From: mboxrd writer <mboxrd@example.com>
|
||||
Date: Fri, 9 Jun 2006 00:44:16 -0700
|
||||
Subject: [PATCH 2/2] another with fake From lines
|
||||
|
||||
>From unchanged
|
||||
From also unchanged
|
||||
no trailing space, no escaping necessary and '>' was intended:
|
||||
>From
|
||||
|
Loading…
Reference in New Issue
Block a user