git-send-email: introduce quote_subject()
authorKrzysztof Mazur <krzysiek@podlesie.net>
Wed, 24 Oct 2012 21:08:26 +0000 (23:08 +0200)
committerJeff King <peff@peff.net>
Thu, 25 Oct 2012 10:05:35 +0000 (06:05 -0400)
The quote_rfc2047() always adds RFC2047 quoting. To avoid
quoting ASCII subjects, before calling quote_rfc2047()
subject must be tested for non-ASCII characters. This patch
introduces a new quote_subject() function, which performs
the test and calls quote_rfc2047 only if necessary.

Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
Signed-off-by: Jeff King <peff@peff.net>
git-send-email.perl
index efeae4c47a2faad2515469f2c34a5b0cb3565d96..1574675d1d5c0f057cac5bf0e139831495ab9565 100755 (executable)
@@ -657,9 +657,7 @@ sub get_patch_subject {
                        $initial_subject = $1;
                        my $subject = $initial_subject;
                        $_ = "Subject: " .
-                               ($subject =~ /[^[:ascii:]]/ ?
-                                quote_rfc2047($subject, $compose_encoding) :
-                                $subject) .
+                               quote_subject($subject, $compose_encoding) .
                                "\n";
                } elsif (/^In-Reply-To:\s*(.+)\s*$/i) {
                        $initial_reply_to = $1;
@@ -907,6 +905,22 @@ sub is_rfc2047_quoted {
        $s =~ m/^(?:"[[:ascii:]]*"|=\?$token\?$token\?$encoded_text\?=)$/o;
 }
 
+sub subject_needs_rfc2047_quoting {
+       my $s = shift;
+
+       return ($s =~ /[^[:ascii:]]/);
+}
+
+sub quote_subject {
+       local $subject = shift;
+       my $encoding = shift || 'UTF-8';
+
+       if (subject_needs_rfc2047_quoting($subject)) {
+               return quote_rfc2047($subject, $encoding);
+       }
+       return $subject;
+}
+
 # use the simplest quoting being able to handle the recipient
 sub sanitize_address {
        my ($recipient) = @_;
@@ -1327,9 +1341,8 @@ sub send_message {
                $body_encoding = $auto_8bit_encoding;
        }
 
-       if ($broken_encoding{$t} && !is_rfc2047_quoted($subject) &&
-                       ($subject =~ /[^[:ascii:]]/)) {
-               $subject = quote_rfc2047($subject, $auto_8bit_encoding);
+       if ($broken_encoding{$t} && !is_rfc2047_quoted($subject)) {
+               $subject = quote_subject($subject, $auto_8bit_encoding);
        }
 
        if (defined $author and $author ne $sender) {