diff --git a/git-send-email.perl b/git-send-email.perl
index 6b4b257..0ff72f6 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -16,6 +16,9 @@
# and second line is the subject of the message.
#
+# Please do not mix tabs spaces across lines that share a relationship
+# in terms of layout. Currently, all indentation is expected to use tabs.
+
use strict;
use warnings;
use Term::ReadLine;
@@ -116,19 +119,20 @@ sub format_2822_time {
die ("local time offset greater than or equal to 24 hours\n");
}
- return sprintf("%s, %2d %s %d %02d:%02d:%02d %s%02d%02d",
- qw(Sun Mon Tue Wed Thu Fri Sat)[$localtm[6]],
- $localtm[3],
- qw(Jan Feb Mar Apr May Jun
- Jul Aug Sep Oct Nov Dec)[$localtm[4]],
- $localtm[5]+1900,
- $localtm[2],
- $localtm[1],
- $localtm[0],
- ($offset >= 0) ? '+' : '-',
- abs($offhour),
- $offmin,
- );
+ return sprintf(
+ "%s, %2d %s %d %02d:%02d:%02d %s%02d%02d",
+ qw(Sun Mon Tue Wed Thu Fri Sat)[$localtm[6]],
+ $localtm[3],
+ qw(Jan Feb Mar Apr May Jun
+ Jul Aug Sep Oct Nov Dec)[$localtm[4]],
+ $localtm[5]+1900,
+ $localtm[2],
+ $localtm[1],
+ $localtm[0],
+ ($offset >= 0) ? '+' : '-',
+ abs($offhour),
+ $offmin,
+ );
}
my $have_email_valid = eval { require Email::Valid; 1 };@@ -192,29 +196,29 @@ my ($validate, $confirm);
my (@suppress_cc);
my %config_bool_settings = (
- "thread" => [\$thread, 1],
- "chainreplyto" => [\$chain_reply_to, 1],
- "suppressfrom" => [\$suppress_from, undef],
- "signedoffbycc" => [\$signed_off_by_cc, undef],
- "signedoffcc" => [\$signed_off_by_cc, undef], # Deprecated
- "validate" => [\$validate, 1],
+ "thread" => [\$thread, 1],
+ "chainreplyto" => [\$chain_reply_to, 1],
+ "suppressfrom" => [\$suppress_from, undef],
+ "signedoffbycc" => [\$signed_off_by_cc, undef],
+ "signedoffcc" => [\$signed_off_by_cc, undef], # Deprecated
+ "validate" => [\$validate, 1],
);
my %config_settings = (
- "smtpserver" => \$smtp_server,
- "smtpserverport" => \$smtp_server_port,
- "smtpuser" => \$smtp_authuser,
- "smtppass" => \$smtp_authpass,
- "to" => \@to,
- "cc" => \@initial_cc,
- "cccmd" => \$cc_cmd,
- "aliasfiletype" => \$aliasfiletype,
- "bcc" => \@bcclist,
- "aliasesfile" => \@alias_files,
- "suppresscc" => \@suppress_cc,
- "envelopesender" => \$envelope_sender,
- "multiedit" => \$multiedit,
- "confirm" => \$confirm,
+ "smtpserver" => \$smtp_server,
+ "smtpserverport" => \$smtp_server_port,
+ "smtpuser" => \$smtp_authuser,
+ "smtppass" => \$smtp_authpass,
+ "to" => \@to,
+ "cc" => \@initial_cc,
+ "cccmd" => \$cc_cmd,
+ "aliasfiletype" => \$aliasfiletype,
+ "bcc" => \@bcclist,
+ "aliasesfile" => \@alias_files,
+ "suppresscc" => \@suppress_cc,
+ "envelopesender" => \$envelope_sender,
+ "multiedit" => \$multiedit,
+ "confirm" => \$confirm,
);
# Handle Uncouth Termination
@@ -245,37 +249,38 @@ $SIG{INT} = \&signal_handler;
# Begin by accumulating all the variables (defined above), that we will end up
# needing, first, from the command line:
-my $rc = GetOptions("sender|from=s" => \$sender,
- "in-reply-to=s" => \$initial_reply_to,
- "subject=s" => \$initial_subject,
- "to=s" => \@to,
- "cc=s" => \@initial_cc,
- "bcc=s" => \@bcclist,
- "chain-reply-to!" => \$chain_reply_to,
- "smtp-server=s" => \$smtp_server,
- "smtp-server-port=s" => \$smtp_server_port,
- "smtp-user=s" => \$smtp_authuser,
- "smtp-pass:s" => \$smtp_authpass,
- "smtp-ssl" => sub { $smtp_encryption = 'ssl' },
- "smtp-encryption=s" => \$smtp_encryption,
- "identity=s" => \$identity,
- "annotate" => \$annotate,
- "compose" => \$compose,
- "quiet" => \$quiet,
- "cc-cmd=s" => \$cc_cmd,
- "suppress-from!" => \$suppress_from,
- "suppress-cc=s" => \@suppress_cc,
- "signed-off-cc|signed-off-by-cc!" => \$signed_off_by_cc,
- "confirm=s" => \$confirm,
- "dry-run" => \$dry_run,
- "envelope-sender=s" => \$envelope_sender,
- "thread!" => \$thread,
- "validate!" => \$validate,
- "format-patch!" => \$format_patch,
- );
+my $rc = GetOptions(
+ "sender|from=s" => \$sender,
+ "in-reply-to=s" => \$initial_reply_to,
+ "subject=s" => \$initial_subject,
+ "to=s" => \@to,
+ "cc=s" => \@initial_cc,
+ "bcc=s" => \@bcclist,
+ "chain-reply-to!" => \$chain_reply_to,
+ "smtp-server=s" => \$smtp_server,
+ "smtp-server-port=s" => \$smtp_server_port,
+ "smtp-user=s" => \$smtp_authuser,
+ "smtp-pass:s" => \$smtp_authpass,
+ "smtp-ssl" => sub { $smtp_encryption = 'ssl' },
+ "smtp-encryption=s" => \$smtp_encryption,
+ "identity=s" => \$identity,
+ "annotate" => \$annotate,
+ "compose" => \$compose,
+ "quiet" => \$quiet,
+ "cc-cmd=s" => \$cc_cmd,
+ "suppress-from!" => \$suppress_from,
+ "suppress-cc=s" => \@suppress_cc,
+ "signed-off-cc|signed-off-by-cc!" => \$signed_off_by_cc,
+ "confirm=s" => \$confirm,
+ "dry-run" => \$dry_run,
+ "envelope-sender=s" => \$envelope_sender,
+ "thread!" => \$thread,
+ "validate!" => \$validate,
+ "format-patch!" => \$format_patch,
+);
unless ($rc) {
- usage();
+ usage();
}
die "Cannot run git format-patch from outside a repository\n"@@ -404,29 +409,55 @@ sub split_addrs {
my %aliases;
my %parse_alias = (
# multiline formats can be supported in the future
- mutt => sub { my $fh = shift; while (<$fh>) {
- if (/^\s*alias\s+(\S+)\s+(.*)$/) {
- my ($alias, $addr) = ($1, $2);
- $addr =~ s/#.*$//; # mutt allows # comments
- # commas delimit multiple addresses
- $aliases{$alias} = [ split_addrs($addr) ];
- }}},
- mailrc => sub { my $fh = shift; while (<$fh>) {
- if (/^alias\s+(\S+)\s+(.*)$/) {
- # spaces delimit multiple addresses
- $aliases{$1} = [ split(/\s+/, $2) ];
- }}},
- pine => sub { my $fh = shift; my $f='\t[^\t]*';
- for (my $x = ''; defined($x); $x = $_) {
+ mutt => sub {
+
+ my $fh = shift;
+
+ while (<$fh>) {
+ if (/^\s*alias\s+(\S+)\s+(.*)$/) {
+ my ($alias, $addr) = ($1, $2);
+ $addr =~ s/#.*$//; # mutt allows # comments
+ # commas delimit multiple addresses
+ $aliases{$alias} = [ split_addrs($addr) ];
+ }
+ }
+ },
+
+ mailrc => sub {
+
+ my $fh = shift;
+
+ while (<$fh>) {
+ if (/^alias\s+(\S+)\s+(.*)$/) {
+ # spaces delimit multiple addresses
+ $aliases{$1} = [ split(/\s+/, $2) ];
+ }
+ }
+ },
+
+ pine => sub {
+
+ my $fh = shift;
+ my $f='\t[^\t]*';
+
+ for (my $x = ''; defined($x); $x = $_) {
chomp $x;
- $x .= $1 while(defined($_ = <$fh>) && /^ +(.*)$/);
+ $x .= $1 while(defined($_ = <$fh>) && /^ +(.*)$/);
$x =~ /^(\S+)$f\t\(?([^\t]+?)\)?(:?$f){0,2}$/ or next;
$aliases{$1} = [ split_addrs($2) ];
- }},
- gnus => sub { my $fh = shift; while (<$fh>) {
- if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
- $aliases{$1} = [ $2 ];
- }}}
+ }
+ },
+
+ gnus => sub {
+
+ my $fh = shift;
+
+ while (<$fh>) {
+ if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
+ $aliases{$1} = [ $2 ];
+ }
+ }
+ }
);
if (@alias_files and $aliasfiletype and defined $parse_alias{$aliasfiletype}) {@@ -571,10 +602,11 @@ EOT
} elsif (/^\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";
+ print C2
+ "MIME-Version: 1.0\n",
+ "Content-Type: text/plain; ",
+ "charset=utf-8\n",
+ "Content-Transfer-Encoding: 8bit\n";
}
} elsif (/^MIME-Version:/i) {
$need_8bit_cte = 0;@@ -583,8 +615,8 @@ EOT
my $subject = $initial_subject;
$_ = "Subject: " .
($subject =~ /[^[:ascii:]]/ ?
- quote_rfc2047($subject) :
- $subject) .
+ quote_rfc2047($subject) :
+ $subject) .
"\n";
} elsif (/^In-Reply-To:\s*(.+)\s*$/i) {
$initial_reply_to = $1;@@ -616,8 +648,10 @@ sub ask {
my $resp;
my $i = 0;
return defined $default ? $default : undef
- unless defined $term->IN and defined fileno($term->IN) and
- defined $term->OUT and defined fileno($term->OUT);
+ unless defined $term->IN
+ and defined fileno($term->IN)
+ and defined $term->OUT
+ and defined fileno($term->OUT);
while ($i++ < 10) {
$resp = $term->readline($prompt);
if (!defined $resp) { # EOF@@ -637,8 +671,12 @@ sub ask {
my $prompting = 0;
if (!defined $sender) {
$sender = $repoauthor || $repocommitter || '';
- $sender = ask("Who should the emails appear to be from? [$sender] ",
- default => $sender);
+
+ $sender = ask(
+ "Who should the emails appear to be from? [$sender] ",
+ default => $sender
+ );
+
print "Emails will be sent from: ", $sender, "\n";
$prompting++;
}@@ -666,7 +704,8 @@ sub expand_aliases {
if ($thread && !defined $initial_reply_to && $prompting) {
$initial_reply_to = ask(
- "Message-ID to be used as In-Reply-To for the first email? ");
+ "Message-ID to be used as In-Reply-To for the first email? "
+ );
}
if (defined $initial_reply_to) {
$initial_reply_to =~ s/^\s*<?//;@@ -806,18 +845,22 @@ sub sanitize_address
sub send_message
{
my @recipients = unique_email_list(@to);
- @cc = (grep { my $cc = extract_valid_address($_);
- not grep { $cc eq $_ } @recipients
- }
- map { sanitize_address($_) }
- @cc);
+
+ @cc = (grep
+ {
+ my $cc = extract_valid_address($_);
+ not grep { $cc eq $_ } @recipients
+ }
+ map { sanitize_address($_) } @cc
+ );
+
my $to = join (",\n\t", @recipients);
@recipients = unique_email_list(@recipients,@cc,@bcclist);
@recipients = (map { extract_valid_address($_) } @recipients);
my $date = format_2822_time($time++);
my $gitversion = '@@GIT_VERSION@@';
if ($gitversion =~ m/..GIT_VERSION../) {
- $gitversion = Git::version();
+ $gitversion = Git::version();
}
my $cc = join(", ", unique_email_list(@cc));@@ -866,9 +909,13 @@ X-Mailer: git-send-email $gitversion
print " To retain the current behavior, but squelch this message,\n";
print " run 'git config --global sendemail.confirm auto'.\n\n";
}
- $_ = ask("Send this email? ([y]es|[n]o|[q]uit|[a]ll): ",
- valid_re => qr/^(?:yes|y|no|n|quit|q|all|a)/i,
- default => $ask_default);
+
+ $_ = ask(
+ "Send this email? ([y]es|[n]o|[q]uit|[a]ll): ",
+ valid_re => qr/^(?:yes|y|no|n|quit|q|all|a)/i,
+ default => $ask_default
+ );
+
die "Send this email reply required" unless defined $_;
if (/^n/i) {
return 0;@@ -903,9 +950,13 @@ X-Mailer: git-send-email $gitversion
}
else {
require Net::SMTP;
- $smtp ||= Net::SMTP->new((defined $smtp_server_port)
- ? "$smtp_server:$smtp_server_port"
- : $smtp_server);
+
+ $smtp ||= Net::SMTP->new(
+ (defined $smtp_server_port)
+ ? "$smtp_server:$smtp_server_port"
+ : $smtp_server
+ );
+
if ($smtp_encryption eq 'tls') {
require Net::SMTP::SSL;
$smtp->command('STARTTLS');@@ -1002,7 +1053,7 @@ foreach my $t (@files) {
chomp($header[$#header]);
s/^\s+/ /;
$header[$#header] .= $_;
- } else {
+ } else {
push(@header, $_);
}
}@@ -1120,9 +1171,9 @@ foreach my $t (@files) {
}
else {
push @xh,
- 'MIME-Version: 1.0',
- "Content-Type: text/plain; charset=$author_encoding",
- 'Content-Transfer-Encoding: 8bit';
+ 'MIME-Version: 1.0',
+ "Content-Type: text/plain; charset=$author_encoding",
+ 'Content-Transfer-Encoding: 8bit';
}
}
}@@ -1130,7 +1181,9 @@ foreach my $t (@files) {
$needs_confirm = (
$confirm eq "always" or
($confirm =~ /^(?:auto|cc)$/ && @cc) or
- ($confirm =~ /^(?:auto|compose)$/ && $compose && $message_num == 1));
+ ($confirm =~ /^(?:auto|compose)$/ && $compose && $message_num == 1)
+ );
+
$needs_confirm = "inform" if ($needs_confirm && $confirm_unconfigured && @cc);
@cc = (@initial_cc, @cc);--
1.6.2.2.479.g2aec