From: Junio C Hamano Date: Mon, 26 May 2008 05:34:23 +0000 (-0700) Subject: Merge branch 'jk/maint-send-email-compose' into maint X-Git-Tag: v1.5.5.3~8 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/a2f5be500839bdf75e4721cc68642b821128b7b9?hp=-c Merge branch 'jk/maint-send-email-compose' into maint * jk/maint-send-email-compose: send-email: rfc2047-quote subject lines with non-ascii characters send-email: specify content-type of --compose body --- a2f5be500839bdf75e4721cc68642b821128b7b9 diff --combined git-send-email.perl index 5630276f78,455a570596..c6bba47eb6 --- a/git-send-email.perl +++ b/git-send-email.perl @@@ -518,8 -518,30 +518,30 @@@ EO open(C,"<",$compose_filename) or die "Failed to open $compose_filename : " . $!; + my $need_8bit_cte = file_has_nonascii($compose_filename); + my $in_body = 0; while() { next if m/^GIT: /; + if (!$in_body && /^\n$/) { + $in_body = 1; + if ($need_8bit_cte) { + print C2 "MIME-Version: 1.0\n", + "Content-Type: text/plain; ", + "charset=utf-8\n", + "Content-Transfer-Encoding: 8bit\n"; + } + } + 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); @@@ -610,6 -632,14 +632,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 { @@@ -627,13 -657,12 +657,12 @@@ # 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 elsif ($recipient_name =~ /[][()<>@,;:\\".\000-\037\177]/) { - $recipient_name =~ s/(["\\\r])/\\$1/; + $recipient_name =~ s/(["\\\r])/\\$1/g; $recipient_name = "\"$recipient_name\""; } @@@ -956,3 -985,13 +985,13 @@@ sub validate_patch } return undef; } + + sub file_has_nonascii { + my $fn = shift; + open(my $fh, '<', $fn) + or die "unable to open $fn: $!\n"; + while (my $line = <$fh>) { + return 1 if $line =~ /[^[:ascii:]]/; + } + return 0; + }