diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-11-16 21:30:06 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-11-16 21:30:06 -0800 |
commit | f1a82fe9a3de780fb2f1fe054d692294544f01e7 (patch) | |
tree | b4114c8ec6552111b23f59df773bf37357a23861 /git-send-email.perl | |
parent | 41a7aa588f449d3b139480b102f510abc5ef7f85 (diff) | |
parent | 78e694787cb89cd008e237b17cdc7f0fa5a15d22 (diff) | |
download | git-f1a82fe9a3de780fb2f1fe054d692294544f01e7.tar.gz git-f1a82fe9a3de780fb2f1fe054d692294544f01e7.tar.xz |
Merge branch 'maint'
* maint:
Update draft release notes for 1.5.3.6
Fix per-directory exclude handing for "git add"
core.excludesfile clean-up
Fix t9101 test failure caused by Subversion "auto-props"
git-send-email: add charset header if we add encoded 'From'
Diffstat (limited to 'git-send-email.perl')
-rwxr-xr-x | git-send-email.perl | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/git-send-email.perl b/git-send-email.perl index f9bd2e5a9..fd0a4ad0c 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -514,11 +514,13 @@ $time = time - scalar $#files; sub unquote_rfc2047 { local ($_) = @_; - if (s/=\?utf-8\?q\?(.*)\?=/$1/g) { + my $encoding; + if (s/=\?([^?]+)\?q\?(.*)\?=/$2/g) { + $encoding = $1; s/_/ /g; s/=([0-9A-F]{2})/chr(hex($1))/eg; } - return "$_"; + return wantarray ? ($_, $encoding) : $_; } # use the simplest quoting being able to handle the recipient @@ -667,6 +669,9 @@ foreach my $t (@files) { open(F,"<",$t) or die "can't open file $t"; my $author = undef; + my $author_encoding; + my $has_content_type; + my $body_encoding; @cc = @initial_cc; @xh = (); my $input_format = undef; @@ -692,12 +697,20 @@ foreach my $t (@files) { next if ($suppress_from); } elsif ($1 eq 'From') { - $author = unquote_rfc2047($2); + ($author, $author_encoding) + = unquote_rfc2047($2); } printf("(mbox) Adding cc: %s from line '%s'\n", $2, $_) unless $quiet; push @cc, $2; } + elsif (/^Content-type:/i) { + $has_content_type = 1; + if (/charset="?[^ "]+/) { + $body_encoding = $1; + } + push @xh, $_; + } elsif (!/^Date:\s/ && /^[-A-Za-z]+:\s+\S/) { push @xh, $_; } @@ -756,6 +769,21 @@ foreach my $t (@files) { if (defined $author) { $message = "From: $author\n\n$message"; + if (defined $author_encoding) { + if ($has_content_type) { + if ($body_encoding eq $author_encoding) { + # ok, we already have the right encoding + } + else { + # uh oh, we should re-encode + } + } + else { + push @xh, + 'MIME-Version: 1.0', + "Content-Type: text/plain; charset=$author_encoding"; + } + } } send_message(); |