From: Junio C Hamano <gitster@pobox.com>
To: "Đoàn Trần Công Danh" <congdanhqx@gmail.com>
Cc: git@vger.kernel.org, "brian m. carlson" <sandals@crustytoothpaste.net>
Subject: Re: [PATCH v2 3/5] mailinfo: skip quoted CR on user's wish
Date: Wed, 05 May 2021 13:12:12 +0900 [thread overview]
Message-ID: <xmqqeeel4y5f.fsf@gitster.g> (raw)
In-Reply-To: <3215ea95cf869c8495d95cfd774973c330c14d1d.1620148732.git.congdanhqx@gmail.com> ("Đoàn Trần Công Danh"'s message of "Wed, 5 May 2021 00:20:00 +0700")
Đoàn Trần Công Danh <congdanhqx@gmail.com> writes:
> Subject: Re: [PATCH v2 3/5] mailinfo: skip quoted CR on user's wish
Nothing wrong per-se, but "on user's wish" feel somewhat bizarre.
Perhaps
mailinfo: allow skipping quoted CR
or something along that line?
> In previous change, we've turned on warning for quoted CR in base64
> encoded email. Despite those warnings are usually helpful for our users,
> they may expect quoted CR in their emails.
>
> Let's give them an option to turn off the warning completely.
>
> Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
> ---
> Documentation/git-mailinfo.txt | 18 +++++++++++++++++-
> builtin/mailinfo.c | 8 ++++++--
> mailinfo.c | 21 ++++++++++++++++++++-
> mailinfo.h | 8 ++++++++
> t/t5100-mailinfo.sh | 6 ++++--
> 5 files changed, 55 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/git-mailinfo.txt b/Documentation/git-mailinfo.txt
> index d343f040f5..c776b27515 100644
> --- a/Documentation/git-mailinfo.txt
> +++ b/Documentation/git-mailinfo.txt
> @@ -9,7 +9,7 @@ git-mailinfo - Extracts patch and authorship from a single e-mail message
> SYNOPSIS
> --------
> [verse]
> -'git mailinfo' [-k|-b] [-u | --encoding=<encoding> | -n] [--[no-]scissors] <msg> <patch>
> +'git mailinfo' [-k|-b] [-u | --encoding=<encoding> | -n] [--[no-]scissors] [--quoted-cr=<action>] <msg> <patch>
This line is getting really crowded. Perhaps it is time to do
'git mailinfo' [<options>] <msg> <patch>
like other Git subcommands with too many options? Certainly it can
be done after the dust settles from this entire series as a follow up
clean-up patch.
> @@ -89,6 +89,22 @@ This can be enabled by default with the configuration option mailinfo.scissors.
> --no-scissors::
> Ignore scissors lines. Useful for overriding mailinfo.scissors settings.
>
> +--quoted-cr=<action>::
> + Action when processes email messages sent with base64 or
> + quoted-printable encoding, and the decoded lines end with CR-LF
s/with CR-LF/with a CRLF/
> + instead of a simple LF.
> ++
> +The valid actions are:
> ++
> +--
> +* `nowarn`: Git will do nothing with this action.
s/with this action./when such a CRLF is seen./ perhaps?
> +* `warn`: Git will issue a warning for each message if such CR-LF is
s/such CR-LF/such a CRLF/
> diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
> index b309badce5..1d600263cb 100644
> --- a/builtin/mailinfo.c
> +++ b/builtin/mailinfo.c
> @@ -9,7 +9,7 @@
> #include "mailinfo.h"
>
> static const char mailinfo_usage[] =
> - "git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info";
> + "git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] [--quoted-cr=<action>] <msg> <patch> < mail >info";
It is surprising that we haven't switched this to parse_options().
It of course is outside the scope of this series, but from a cursory
look of its option parsing loop, it looks like a trivial improvement
to make.
> @@ -43,7 +43,11 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
> mi.use_scissors = 0;
> else if (!strcmp(argv[1], "--no-inbody-headers"))
> mi.use_inbody_headers = 0;
> - else
> + else if (skip_prefix(argv[1], "--quoted-cr=", &str)) {
> + mi.quoted_cr = mailinfo_parse_quoted_cr_action(str);
> + if (mi.quoted_cr == quoted_cr_invalid_action)
> + usage(mailinfo_usage);
This is not all that helpful, given that mailinfo_usage[] only says
<action> without saying what the supported values are, and the
message does not make it clear it was issued while looking at the
--quoted-cr option.
At least, something like
if (mi.quoted_cr == quoted_cr_invalid_action)
die("--quoted-cr=%s: invalid action", str);
would be more palatable, but I wonder if mailinfo_parse_quoted_cr_action()
should have an option to die with the list of actions it knows about
in a message.
> diff --git a/mailinfo.c b/mailinfo.c
> index 713567f84b..fe7ffd01d0 100644
> --- a/mailinfo.c
> +++ b/mailinfo.c
> @@ -1040,7 +1040,8 @@ static void handle_filter_flowed(struct mailinfo *mi, struct strbuf *line,
>
> static void summarize_quoted_cr(struct mailinfo *mi, int have_quoted_cr)
> {
> - if (have_quoted_cr)
> + if (have_quoted_cr
> + && mi->quoted_cr == quoted_cr_warn)
Existing code in this file prefers to split a multi-line statement
after sequence point like &&, ||, etc., not before.
> warning("quoted CR detected");
> }
>
> @@ -1221,9 +1222,19 @@ int mailinfo(struct mailinfo *mi, const char *msg, const char *patch)
> return mi->input_error;
> }
>
> +enum quoted_cr_action mailinfo_parse_quoted_cr_action(const char *action)
> +{
> + if (!strcmp(action, "nowarn"))
> + return quoted_cr_nowarn;
> + else if (!strcmp(action, "warn"))
> + return quoted_cr_warn;
> + return quoted_cr_invalid_action;
> +}
OK.
> static int git_mailinfo_config(const char *var, const char *value, void *mi_)
> {
> struct mailinfo *mi = mi_;
> + const char *str;
>
> if (!starts_with(var, "mailinfo."))
> return git_default_config(var, value, NULL);
> @@ -1231,6 +1242,13 @@ static int git_mailinfo_config(const char *var, const char *value, void *mi_)
> mi->use_scissors = git_config_bool(var, value);
> return 0;
> }
> + if (!strcmp(var, "mailinfo.quotedcr")) {
> + git_config_string(&str, var, value);
> + mi->quoted_cr = mailinfo_parse_quoted_cr_action(str);
> + if (mi->quoted_cr == quoted_cr_invalid_action)
> + die(_("bad action '%s' for '%s'"), str, var);
> + free((void *)str);
> + }
Here, it is more reasonable. It still does not say what actions are
accepted, but at least the user learns where our displeasure comes
from.
> /* perhaps others here */
> return 0;
> }
next prev parent reply other threads:[~2021-05-05 4:12 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-21 1:34 [PATCH] mailinfo: strip CR from base64/quoted-printable email Đoàn Trần Công Danh
2021-04-21 2:09 ` Junio C Hamano
2021-04-21 3:32 ` brian m. carlson
2021-04-21 12:07 ` Đoàn Trần Công Danh
2021-04-22 1:10 ` brian m. carlson
2021-05-04 17:19 ` [PATCH v2 0/5] Teach am/mailinfo to process quoted CR Đoàn Trần Công Danh
2021-05-04 17:19 ` [PATCH v2 1/5] mailinfo: avoid magic number in option parsing Đoàn Trần Công Danh
2021-05-04 17:19 ` [PATCH v2 2/5] mailinfo: warn if CR found in base64/quoted-printable email Đoàn Trần Công Danh
2021-05-05 3:41 ` Junio C Hamano
2021-05-04 17:20 ` [PATCH v2 3/5] mailinfo: skip quoted CR on user's wish Đoàn Trần Công Danh
2021-05-05 4:12 ` Junio C Hamano [this message]
2021-05-05 15:53 ` Đoàn Trần Công Danh
2021-05-04 17:20 ` [PATCH v2 4/5] mailinfo: strip quoted CR on users' wish Đoàn Trần Công Danh
2021-05-05 4:27 ` Junio C Hamano
2021-05-04 17:20 ` [PATCH v2 5/5] am: learn to process quoted lines that ends with CRLF Đoàn Trần Công Danh
2021-05-05 4:31 ` [PATCH v2 0/5] Teach am/mailinfo to process quoted CR Junio C Hamano
2021-05-06 15:02 ` [PATCH v3 0/6] " Đoàn Trần Công Danh
2021-05-06 15:02 ` [PATCH v3 1/6] mailinfo: load default metainfo_charset lazily Đoàn Trần Công Danh
2021-05-06 15:02 ` [PATCH v3 2/6] mailinfo: stop parsing options manually Đoàn Trần Công Danh
2021-05-08 10:44 ` Junio C Hamano
2021-05-06 15:02 ` [PATCH v3 3/6] mailinfo: warn if CR found in decoded base64/QP email Đoàn Trần Công Danh
2021-05-08 10:52 ` Junio C Hamano
2021-05-06 15:02 ` [PATCH v3 4/6] mailinfo: allow squelching quoted CR warning Đoàn Trần Công Danh
2021-05-06 15:02 ` [PATCH v3 5/6] mailinfo: allow stripping quoted CR without warning Đoàn Trần Công Danh
2021-05-06 15:02 ` [PATCH v3 6/6] am: learn to process quoted lines that ends with CRLF Đoàn Trần Công Danh
2021-05-08 10:57 ` [PATCH v3 0/6] Teach am/mailinfo to process quoted CR Junio C Hamano
[not found] ` <cover.1620309355.git.congdanhqx@gmail.com>
2021-05-06 15:02 ` [PATCH v3 2/6] mailinfo: stop parse options manually Đoàn Trần Công Danh
2021-05-06 15:19 ` Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 0/6] Teach am/mailinfo to process quoted CR Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 1/6] mailinfo: load default metainfo_charset lazily Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 2/6] mailinfo: stop parsing options manually Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 3/6] mailinfo: warn if CRLF found in decoded base64/QP email Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 4/6] mailinfo: allow squelching quoted CRLF warning Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 5/6] mailinfo: allow stripping quoted CR without warning Đoàn Trần Công Danh
2021-05-09 17:12 ` [PATCH v4 6/6] am: learn to process quoted lines that ends with CRLF Đoàn Trần Công Danh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqeeel4y5f.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=congdanhqx@gmail.com \
--cc=git@vger.kernel.org \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.