mailinfo: allow stripping quoted CR without warning

In previous changes, we've turned on warning for quoted CR in base64 or
quoted-printable email messages. Some projects see those quoted CR a lot,
they know that it happens most of the time, and they find it's desirable
to always strip those CR.

Those projects in question usually fall back to use other tools to handle
patches when receive such patches.

Let's help those projects handle those patches by stripping those
excessive CR.

Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Đoàn Trần Công Danh 2021-05-10 00:12:12 +07:00 committed by Junio C Hamano
parent f1aa299443
commit 133a4fda59
4 changed files with 15 additions and 0 deletions

View File

@ -102,6 +102,7 @@ The valid actions are:
* `nowarn`: Git will do nothing when such a CRLF is found. * `nowarn`: Git will do nothing when such a CRLF is found.
* `warn`: Git will issue a warning for each message if such a CRLF is * `warn`: Git will issue a warning for each message if such a CRLF is
found. found.
* `strip`: Git will convert those CRLF to LF.
-- --
+ +
The default action could be set by configuration option `mailinfo.quotedCR`. The default action could be set by configuration option `mailinfo.quotedCR`.

View File

@ -998,6 +998,11 @@ static void handle_filter_flowed(struct mailinfo *mi, struct strbuf *line,
line->buf[len - 2] == '\r' && line->buf[len - 2] == '\r' &&
line->buf[len - 1] == '\n') { line->buf[len - 1] == '\n') {
mi->have_quoted_cr = 1; mi->have_quoted_cr = 1;
if (mi->quoted_cr == quoted_cr_strip) {
strbuf_setlen(line, len - 2);
strbuf_addch(line, '\n');
len--;
}
} }
handle_filter(mi, line); handle_filter(mi, line);
return; return;
@ -1227,6 +1232,8 @@ int mailinfo_parse_quoted_cr_action(const char *actionstr, int *action)
*action = quoted_cr_nowarn; *action = quoted_cr_nowarn;
else if (!strcmp(actionstr, "warn")) else if (!strcmp(actionstr, "warn"))
*action = quoted_cr_warn; *action = quoted_cr_warn;
else if (!strcmp(actionstr, "strip"))
*action = quoted_cr_strip;
else else
return -1; return -1;
return 0; return 0;

View File

@ -8,6 +8,7 @@
enum quoted_cr_action { enum quoted_cr_action {
quoted_cr_nowarn, quoted_cr_nowarn,
quoted_cr_warn, quoted_cr_warn,
quoted_cr_strip,
}; };
struct mailinfo { struct mailinfo {

View File

@ -259,6 +259,12 @@ test_expect_success 'mailinfo warn CR in base64 encoded email' '
check_quoted_cr_mail quoted-cr/0001 --quoted-cr=nowarn && check_quoted_cr_mail quoted-cr/0001 --quoted-cr=nowarn &&
test_must_be_empty quoted-cr/0001.err && test_must_be_empty quoted-cr/0001.err &&
check_quoted_cr_mail quoted-cr/0002 --quoted-cr=nowarn && check_quoted_cr_mail quoted-cr/0002 --quoted-cr=nowarn &&
test_must_be_empty quoted-cr/0002.err &&
cp quoted-cr/0001-expected.msg quoted-cr/0002-expected.msg &&
cp quoted-cr/0001-expected.patch quoted-cr/0002-expected.patch &&
check_quoted_cr_mail quoted-cr/0001 --quoted-cr=strip &&
test_must_be_empty quoted-cr/0001.err &&
check_quoted_cr_mail quoted-cr/0002 --quoted-cr=strip &&
test_must_be_empty quoted-cr/0002.err test_must_be_empty quoted-cr/0002.err
' '