Re: [RFC-PATCH v2 2/2] send-email: quote-email quotes the message body
- From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
- Date
- May 28, 2016, 15:01 UTC
- Message-ID
- <vpqlh2ujkg8.fsf@anie.imag.fr>
- In-Reply-To
- <1464369102-7551-3-git-send-email-tom.russello@grenoble-inp.org>
Tom Russello <tom.russello@grenoble-inp.org> writes:
> Currently, `send-email` without `--compose` implies `--annotate`.
I don't get it. Did you mean s/without/with/? Even if so, this is not exactly true: "git send-email --compose -1" will open the editor only for the cover-letter, while adding --annotate will also open it for the patch.
Show 6 quoted lines
> Keeping that behavior when using `--quote-email` populates the patch file with > the quoted message body, and the patch is saved no matter what. If the user > closes his editor and then exits `send-email`, changes will be saved. > > Should we keep the current behavior for the user, keeping the changes (including > the quoted message body) in the patch, or should we discard them?
(Note: we discussed this off-list already, but I'll try to summarize my thoughts here)
I don't have strong opinion on this, but I think there's a difference between launching the editor directly on the input patch files (resulting in _user_'s edit being done directly on them) and having the script modify it in-place (resulting in automatic changes done directly on the user's files).
I usually use "git send-email" directly without using "git format-patch", so I'm not the best juge. But I can imagine a flow like
1) run "git send-email *.patch"
2) start editting
3) notice there's something wrong, give up for now (answer 'q' when git send-email prompts for confirmation, or kill it via Control-C in a terminal)
4) run "git send-email *.patch" again
5) be happy that changes done at 2) are still there.
With --quote-email, it's different. The scenario above would result in
5') WTF, why is the email quoted twice?
Unfortunately, I don't really have a solution for this. My first thought was that we should copy the files to a temporary location before starting the editor (that what I'm used to when using "git send-email" without "git format-patch"), but that would prevent 5) above.
Show 7 quoted lines
> @@ -109,7 +109,10 @@ is not set, this will be prompted for. > --quote-email=<email_file>:: > Reply to the given email and automatically populate the "To:", "Cc:" and > "In-Reply-To:" fields. If `--compose` is set, this will also fill the > - subject field with "Re: [<email_file>'s subject]". > + subject field with "Re: [<email_file>'s subject]" and quote the message body > + of <email_file>.
I'd add "in the introductory message".
> + while (<$fh>) {
> + # Only for files containing crlf line endings
> + s/\r//g;The comment doesn't really say what it does.
What about "turn crlf line endings into lf-only"?
Show 19 quoted lines
> } elsif ($annotate) {
> - do_edit(@files);
> + if ($quote_email) {
> + my $quote_email_filename = ($repo ?
> + tempfile(".gitsendemail.msg.XXXXXX",
> + DIR => $repo->repo_path()) :
> + tempfile(".gitsendemail.msg.XXXXXX",
> + DIR => "."))[1];
> +
> + do_insert_quoted_message($quote_email_filename, $files[0]);
> +
> + my $tmp = $files[0];
> + $files[0] = $quote_email_filename;
> +
> + do_edit(@files);
> +
> + # Erase the original patch
> + move($quote_email_filename, $tmp);
> + $files[0] = $tmp;When writing comment, always try to ask the question "why?" more than "what?". This part is possibly controversial, think about a contributor finding this piece of code later without having followed the current conversation. He'd probably expect an explanation about why you need a temp file here and not elsewhere.
Show 5 quoted lines
> + open my $c, "<", $original_file > + or die "Failed to open $original_file : " . $!; > + > + open my $c2, ">", $tmp_file > + or die "Failed to open $tmp_file : " . $!;
No space before :.
Show 11 quoted lines
> --- a/t/t9001-send-email.sh > +++ b/t/t9001-send-email.sh > @@ -1916,6 +1916,12 @@ test_expect_success $PREREQ 'Fields with --quote-email are correct' ' > echo "$cc_adr" | grep cc1@example.com > ' > > +test_expect_success $PREREQ 'correct quoted message with --quote-email' ' > + grep "On Sat, 12 Jun 2010 15:53:58 +0200, author@example.com wrote:" msgtxt1 && > + grep "> Have you seen my previous email?" msgtxt1 && > + grep ">> Previous content" msgtxt1 > +'
When the spec says "if --compose ... then ...", "after the triple-dash", and "in the first patch", one would expect at least one test with --compose and one without, something to check that the insertion was done below the triple-dash, and one test with two patches, checking that the second patch is not altered by --quote-email.
-- Matthieu Moy http://www-verimag.imag.fr/~moy/