diff options
Diffstat (limited to 'git-send-email.perl')
| -rwxr-xr-x | git-send-email.perl | 53 | 
1 files changed, 47 insertions, 6 deletions
diff --git a/git-send-email.perl b/git-send-email.perl index d356901348..da81be40cb 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -19,10 +19,10 @@  use 5.008;  use strict;  use warnings; +use POSIX qw/strftime/;  use Term::ReadLine;  use Getopt::Long;  use Text::ParseWords; -use Data::Dumper;  use Term::ANSIColor;  use File::Temp qw/ tempdir tempfile /;  use File::Spec::Functions qw(catfile); @@ -533,7 +533,7 @@ my %parse_alias = (  			$aliases{$alias} = \@addr  		}}},  	mailrc => sub { my $fh = shift; while (<$fh>) { -		if (/^alias\s+(\S+)\s+(.*)$/) { +		if (/^alias\s+(\S+)\s+(.*?)\s*$/) {  			# spaces delimit multiple addresses  			$aliases{$1} = [ quotewords('\s+', 0, $2) ];  		}}}, @@ -621,6 +621,8 @@ if (@rev_list_opts) {  	push @files, $repo->command('format-patch', '-o', tempdir(CLEANUP => 1), @rev_list_opts);  } +@files = handle_backup_files(@files); +  if ($validate) {  	foreach my $f (@files) {  		unless (-p $f) { @@ -827,9 +829,10 @@ if (defined $sender) {  # But it's a no-op to run sanitize_address on an already sanitized address.  $sender = sanitize_address($sender); +my $to_whom = "To whom should the emails be sent (if anyone)?";  my $prompting = 0;  if (!@initial_to && !defined $to_cmd) { -	my $to = ask("Who should the emails be sent to (if any)? ", +	my $to = ask("$to_whom ",  		     default => "",  		     valid_re => qr/\@.*\./, confirm_only => 1);  	push @initial_to, parse_address_line($to) if defined $to; # sanitized/validated later @@ -924,7 +927,7 @@ sub validate_address {  			cleanup_compose_files();  			exit(0);  		} -		$address = ask("Who should the email be sent to (if any)? ", +		$address = ask("$to_whom ",  			default => "",  			valid_re => qr/\@.*\./, confirm_only => 1);  	} @@ -949,7 +952,7 @@ my ($message_id_stamp, $message_id_serial);  sub make_message_id {  	my $uniq;  	if (!defined $message_id_stamp) { -		$message_id_stamp = sprintf("%s-%s", time, $$); +		$message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time));  		$message_id_serial = 0;  	}  	$message_id_serial++; @@ -964,7 +967,7 @@ sub make_message_id {  		require Sys::Hostname;  		$du_part = 'user@' . Sys::Hostname::hostname();  	} -	my $message_id_template = "<%s-git-send-email-%s>"; +	my $message_id_template = "<%s-%s>";  	$message_id = sprintf($message_id_template, $uniq, $du_part);  	#print "new message id = $message_id\n"; # Was useful for debugging  } @@ -1726,6 +1729,44 @@ sub validate_patch {  	return;  } +sub handle_backup { +	my ($last, $lastlen, $file, $known_suffix) = @_; +	my ($suffix, $skip); + +	$skip = 0; +	if (defined $last && +	    ($lastlen < length($file)) && +	    (substr($file, 0, $lastlen) eq $last) && +	    ($suffix = substr($file, $lastlen)) !~ /^[a-z0-9]/i) { +		if (defined $known_suffix && $suffix eq $known_suffix) { +			print "Skipping $file with backup suffix '$known_suffix'.\n"; +			$skip = 1; +		} else { +			my $answer = ask("Do you really want to send $file? (y|N): ", +					 valid_re => qr/^(?:y|n)/i, +					 default => 'n'); +			$skip = ($answer ne 'y'); +			if ($skip) { +				$known_suffix = $suffix; +			} +		} +	} +	return ($skip, $known_suffix); +} + +sub handle_backup_files { +	my @file = @_; +	my ($last, $lastlen, $known_suffix, $skip, @result); +	for my $file (@file) { +		($skip, $known_suffix) = handle_backup($last, $lastlen, +						       $file, $known_suffix); +		push @result, $file unless $skip; +		$last = $file; +		$lastlen = length($file); +	} +	return @result; +} +  sub file_has_nonascii {  	my $fn = shift;  	open(my $fh, '<', $fn)  | 
