Merge branch 'jm/send-email-tls-auth-on-batch'
authorJunio C Hamano <gitster@pobox.com>
Thu, 2 Aug 2018 22:30:46 +0000 (15:30 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Aug 2018 22:30:46 +0000 (15:30 -0700)
"git send-email" when using in a batched mode that limits the
number of messages sent in a single SMTP session lost the contents
of the variable used to choose between tls/ssl, unable to send the
second and later batches, which has been fixed.

* jm/send-email-tls-auth-on-batch:
send-email: fix tls AUTH when sending batch

1  2 
git-send-email.perl
diff --combined git-send-email.perl
index f4c07908d2737203031bdcab7f4f30404e64d4e5,1f9a73f74373e886931d4641799f21ff090d01dd..2be5dac337a0e2f4a0ea1538c7873aa43382cb04
@@@ -231,7 -231,7 +231,7 @@@ my ($validate, $confirm)
  my (@suppress_cc);
  my ($auto_8bit_encoding);
  my ($compose_encoding);
 -my ($target_xfer_encoding);
 +my $target_xfer_encoding = 'auto';
  
  my ($debug_net_smtp) = 0;             # Net::SMTP, see send_message()
  
@@@ -645,7 -645,7 +645,7 @@@ if (@rev_list_opts) 
  if ($validate) {
        foreach my $f (@files) {
                unless (-p $f) {
 -                      my $error = validate_patch($f);
 +                      my $error = validate_patch($f, $target_xfer_encoding);
                        $error and die sprintf(__("fatal: %s: %s\nwarning: no patches were sent\n"),
                                                  $f, $error);
                }
@@@ -1479,7 -1479,7 +1479,7 @@@ EO
                                                         SSL => 1);
                        }
                }
-               else {
+               elsif (!$smtp) {
                        $smtp_server_port ||= 25;
                        $smtp ||= Net::SMTP->new($smtp_server,
                                                 Hello => $smtp_domain,
                                        $smtp->starttls(ssl_verify_params())
                                                or die sprintf(__("STARTTLS failed! %s"), IO::Socket::SSL::errstr());
                                }
-                               $smtp_encryption = '';
                                # Send EHLO again to receive fresh
                                # supported commands
                                $smtp->hello($smtp_domain);
@@@ -1737,11 -1736,18 +1736,11 @@@ sub process_file 
                        }
                }
        }
 -      if (defined $target_xfer_encoding) {
 -              $xfer_encoding = '8bit' if not defined $xfer_encoding;
 -              $message = apply_transfer_encoding(
 -                      $message, $xfer_encoding, $target_xfer_encoding);
 -              $xfer_encoding = $target_xfer_encoding;
 -      }
 -      if (defined $xfer_encoding) {
 -              push @xh, "Content-Transfer-Encoding: $xfer_encoding";
 -      }
 -      if (defined $xfer_encoding or $has_content_type) {
 -              unshift @xh, 'MIME-Version: 1.0' unless $has_mime_version;
 -      }
 +      $xfer_encoding = '8bit' if not defined $xfer_encoding;
 +      ($message, $xfer_encoding) = apply_transfer_encoding(
 +              $message, $xfer_encoding, $target_xfer_encoding);
 +      push @xh, "Content-Transfer-Encoding: $xfer_encoding";
 +      unshift @xh, 'MIME-Version: 1.0' unless $has_mime_version;
  
        $needs_confirm = (
                $confirm eq "always" or
@@@ -1845,16 -1851,13 +1844,16 @@@ sub apply_transfer_encoding 
        $message = MIME::Base64::decode($message)
                if ($from eq 'base64');
  
 +      $to = ($message =~ /.{999,}/) ? 'quoted-printable' : '8bit'
 +              if $to eq 'auto';
 +
        die __("cannot send message as 7bit")
                if ($to eq '7bit' and $message =~ /[^[:ascii:]]/);
 -      return $message
 +      return ($message, $to)
                if ($to eq '7bit' or $to eq '8bit');
 -      return MIME::QuotedPrint::encode($message, "\n", 0)
 +      return (MIME::QuotedPrint::encode($message, "\n", 0), $to)
                if ($to eq 'quoted-printable');
 -      return MIME::Base64::encode($message, "\n")
 +      return (MIME::Base64::encode($message, "\n"), $to)
                if ($to eq 'base64');
        die __("invalid transfer encoding");
  }
@@@ -1873,7 -1876,7 +1872,7 @@@ sub unique_email_list 
  }
  
  sub validate_patch {
 -      my $fn = shift;
 +      my ($fn, $xfer_encoding) = @_;
  
        if ($repo) {
                my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
                return $hook_error if $hook_error;
        }
  
 -      open(my $fh, '<', $fn)
 -              or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
 -      while (my $line = <$fh>) {
 -              if (length($line) > 998) {
 -                      return sprintf(__("%s: patch contains a line longer than 998 characters"), $.);
 +      # Any long lines will be automatically fixed if we use a suitable transfer
 +      # encoding.
 +      unless ($xfer_encoding =~ /^(?:auto|quoted-printable|base64)$/) {
 +              open(my $fh, '<', $fn)
 +                      or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
 +              while (my $line = <$fh>) {
 +                      if (length($line) > 998) {
 +                              return sprintf(__("%s: patch contains a line longer than 998 characters"), $.);
 +                      }
                }
        }
        return;