Merge branch 'jc/send-email-reconfirm'
Validate interactive input to "git send-email" to avoid common mistakes such as saying "y<RETURN>" to sender mail address whose prompt is given with a correctly guessed default. * jc/send-email-reconfirm: send-email: validate & reconfirm interactive responsesmaint
						commit
						200282f1c7
					
				|  | @ -681,6 +681,7 @@ sub ask { | ||||||
| 	my ($prompt, %arg) = @_; | 	my ($prompt, %arg) = @_; | ||||||
| 	my $valid_re = $arg{valid_re}; | 	my $valid_re = $arg{valid_re}; | ||||||
| 	my $default = $arg{default}; | 	my $default = $arg{default}; | ||||||
|  | 	my $confirm_only = $arg{confirm_only}; | ||||||
| 	my $resp; | 	my $resp; | ||||||
| 	my $i = 0; | 	my $i = 0; | ||||||
| 	return defined $default ? $default : undef | 	return defined $default ? $default : undef | ||||||
|  | @ -698,6 +699,12 @@ sub ask { | ||||||
| 		if (!defined $valid_re or $resp =~ /$valid_re/) { | 		if (!defined $valid_re or $resp =~ /$valid_re/) { | ||||||
| 			return $resp; | 			return $resp; | ||||||
| 		} | 		} | ||||||
|  | 		if ($confirm_only) { | ||||||
|  | 			my $yesno = $term->readline("Are you sure you want to use <$resp> [y/N]? "); | ||||||
|  | 			if (defined $yesno && $yesno =~ /y/i) { | ||||||
|  | 				return $resp; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return undef; | 	return undef; | ||||||
| } | } | ||||||
|  | @ -745,13 +752,15 @@ my $prompting = 0; | ||||||
| if (!defined $sender) { | if (!defined $sender) { | ||||||
| 	$sender = $repoauthor || $repocommitter || ''; | 	$sender = $repoauthor || $repocommitter || ''; | ||||||
| 	$sender = ask("Who should the emails appear to be from? [$sender] ", | 	$sender = ask("Who should the emails appear to be from? [$sender] ", | ||||||
| 	              default => $sender); | 	              default => $sender, | ||||||
|  | 		      valid_re => qr/\@.*\./, confirm_only => 1); | ||||||
| 	print "Emails will be sent from: ", $sender, "\n"; | 	print "Emails will be sent from: ", $sender, "\n"; | ||||||
| 	$prompting++; | 	$prompting++; | ||||||
| } | } | ||||||
|  |  | ||||||
| if (!@initial_to && !defined $to_cmd) { | if (!@initial_to && !defined $to_cmd) { | ||||||
| 	my $to = ask("Who should the emails be sent to? "); | 	my $to = ask("Who should the emails be sent to? ", | ||||||
|  | 		     valid_re => qr/\@.*\./, confirm_only => 1); | ||||||
| 	push @initial_to, parse_address_line($to) if defined $to; # sanitized/validated later | 	push @initial_to, parse_address_line($to) if defined $to; # sanitized/validated later | ||||||
| 	$prompting++; | 	$prompting++; | ||||||
| } | } | ||||||
|  | @ -777,7 +786,8 @@ sub expand_one_alias { | ||||||
|  |  | ||||||
| if ($thread && !defined $initial_reply_to && $prompting) { | if ($thread && !defined $initial_reply_to && $prompting) { | ||||||
| 	$initial_reply_to = ask( | 	$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? ", | ||||||
|  | 		valid_re => qr/\@.*\./, confirm_only => 1); | ||||||
| } | } | ||||||
| if (defined $initial_reply_to) { | if (defined $initial_reply_to) { | ||||||
| 	$initial_reply_to =~ s/^\s*<?//; | 	$initial_reply_to =~ s/^\s*<?//; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano