send-email: specify content-type of --compose body

If the compose message contains non-ascii characters, then
we assume it is in utf-8 and include the appropriate MIME
headers. If the user has already included a MIME-Version
header, then we assume they know what they are doing and
don't add any headers.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2008-03-28 17:28:33 -04:00 committed by Junio C Hamano
parent e4d594c6bd
commit 0706bd19ef
2 changed files with 68 additions and 0 deletions

View File

@ -518,8 +518,22 @@ EOT
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(<C>) {
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;
}
print C2 $_;
}
close(C);
@ -956,3 +970,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;
}

View File

@ -166,4 +166,48 @@ test_expect_success 'second message is patch' '
grep "Subject:.*Second" msgtxt2
'
test_expect_success '--compose adds MIME for utf8 body' '
clean_fake_sendmail &&
(echo "#!/bin/sh" &&
echo "echo utf8 body: àéìöú >>\$1"
) >fake-editor-utf8 &&
chmod +x fake-editor-utf8 &&
echo y | \
GIT_EDITOR=$(pwd)/fake-editor-utf8 \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject foo \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches &&
grep "^utf8 body" msgtxt1 &&
grep "^Content-Type: text/plain; charset=utf-8" msgtxt1
'
test_expect_success '--compose respects user mime type' '
clean_fake_sendmail &&
(echo "#!/bin/sh" &&
echo "(echo MIME-Version: 1.0"
echo " echo Content-Type: text/plain\\; charset=iso-8859-1"
echo " echo Content-Transfer-Encoding: 8bit"
echo " echo Subject: foo"
echo " echo "
echo " echo utf8 body: àéìöú) >\$1"
) >fake-editor-utf8-mime &&
chmod +x fake-editor-utf8-mime &&
echo y | \
GIT_EDITOR=$(pwd)/fake-editor-utf8-mime \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject foo \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches &&
grep "^utf8 body" msgtxt1 &&
grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1 &&
! grep "^Content-Type: text/plain; charset=utf-8" msgtxt1
'
test_done