On Wed, Mar 26, 2008 at 07:59:48AM +0200, Teemu Likonen wrote:Ah, yes, I hadn't considered that. We should definitely do the quoting after all of the user's input. Replace 2/2 from my series with the patch below, which handles this case correctly (and as a bonus, the user sees the unencoded subject in the editor, which is much more readable). git-format-patch recently got a --cover-letter option which does the same thing. I actually use a real MUA (mutt) instead of send-email, and this way you can avoid the message-id cutting and pasting that is required. It automatically does the right thing with encodings because I end up sending the message using my MUA. Yes, the git-send-email code is a real mess for this sort of thing. I think it started very small and specific, and has gotten hack upon hack piled on it. It would be much nicer rewritten from scratch around one of the many abstracted perl mail objects (though that does introduce a new dependency). I think that is sensible. Want to try adding it on top of my patches? Below is the revised subject-munging patch. -- >8 -- send-email: rfc2047-quote subject lines with non-ascii characters We always use 'utf-8' as the encoding, since we currently have no way of getting the information from the user. This also refactors the quoting of recipient names, since both processes can share the rfc2047 quoting code. Signed-off-by: Jeff King <peff@peff.net> --- git-send-email.perl | 20 ++++++++++++++++++-- t/t9001-send-email.sh | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 7c4f06c..3694f81 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -536,6 +536,15 @@ EOT if (!$in_body && /^MIME-Version:/i) { $need_8bit_cte = 0; } + if (!$in_body && /^Subject: ?(.*)/i) { + my $subject = $1; + $_ = "Subject: " . + ($subject =~ /[^[:ascii:]]/ ? + quote_rfc2047($subject) : + $subject) . + "\n"; + } + } print C2 $_; } close(C); @@ -626,6 +635,14 @@ sub unquote_rfc2047 { return wantarray ? ($_, $encoding) : $_; } +sub quote_rfc2047 { + local $_ = shift; + my $encoding = shift || 'utf-8'; + s/([^-a-zA-Z0-9!*+\/])/sprintf("=%02X", ord($1))/eg; + s/(.*)/=\?$encoding\?q\?$1\?=/; + return $_; +} + # use the simplest quoting being able to handle the recipient sub sanitize_address { @@ -643,8 +660,7 @@ sub sanitize_address # rfc2047 is needed if a non-ascii char is included if ($recipient_name =~ /[^[:ascii:]]/) { - $recipient_name =~ s/([^-a-zA-Z0-9!*+\/])/sprintf("=%02X", ord($1))/eg; - $recipient_name =~ s/(.*)/=\?utf-8\?q\?$1\?=/; + $recipient_name = quote_rfc2047($recipient_name); } # double quotes are needed if specials or CTLs are included diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index e222c49..a4bcd28 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -210,4 +210,19 @@ test_expect_success '--compose respects user mime type' ' ! grep "^Content-Type: text/plain; charset=utf-8" msgtxt1 ' +test_expect_success '--compose adds MIME for utf8 subject' ' + clean_fake_sendmail && + echo y | \ + GIT_EDITOR=$(pwd)/fake-editor \ + GIT_SEND_EMAIL_NOTTY=1 \ + git send-email \ + --compose --subject utf8-sübjëct \ + --from="Example <nobody@example.com>" \ + --to=nobody@example.com \ + --smtp-server="$(pwd)/fake.sendmail" \ + $patches && + grep "^fake edit" msgtxt1 && + grep "^Subject: =?utf-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1 +' + test_done -- 1.5.5.rc1.123.ge5f4e6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| James Bottomley | Re: Integration of SCST in the mainstream Linux kernel |
| Greg Kroah-Hartman | [PATCH 007/196] Chinese: add translation of stable_kernel_rules.txt |
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Jan Engelhardt | intel iommu (Re: -mm merge plans for 2.6.23) |
git: | |
| Alexey Dobriyan | Re: [GIT]: Networking |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | Re: [BUG] New Kernel Bugs |
