1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-05 14:06:15 +02:00

send-email: get all the quoting of realnames right

- when sending several mails I got a slightly different behaviour for the first
  mail compared to the second to last one.  The reason is that $from was
  assigned in line 608 and was not reset when beginning to handle the next
  mail.

- Email::Valid can only handle properly quoted real names, so quote arguments
  to extract_valid_address.

This patch cleans up variable naming to better differentiate between sender of
the mail and it's author.

Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Uwe Kleine-König 2007-08-09 15:27:58 +02:00 committed by Junio C Hamano
parent 155197e6e7
commit 94638f89f5

View File

@ -137,7 +137,7 @@ sub format_2822_time {
# Variables we fill in automatically, or via prompting:
my (@to,@cc,@initial_cc,@bcclist,@xh,
$initial_reply_to,$initial_subject,@files,$from,$compose,$time);
$initial_reply_to,$initial_subject,@files,$author,$sender,$compose,$time);
my $smtp_server;
my $envelope_sender;
@ -179,7 +179,7 @@ sub format_2822_time {
# Begin by accumulating all the variables (defined above), that we will end up
# needing, first, from the command line:
my $rc = GetOptions("from=s" => \$from,
my $rc = GetOptions("sender|from=s" => \$sender,
"in-reply-to=s" => \$initial_reply_to,
"subject=s" => \$initial_subject,
"to=s" => \@to,
@ -216,8 +216,8 @@ sub format_2822_time {
# Now, let's fill any that aren't set in with defaults:
my ($author) = $repo->ident_person('author');
my ($committer) = $repo->ident_person('committer');
my ($repoauthor) = $repo->ident_person('author');
my ($repocommitter) = $repo->ident_person('committer');
my %aliases;
my @alias_files = $repo->config('sendemail.aliasesfile');
@ -254,17 +254,17 @@ sub format_2822_time {
}
}
($from) = expand_aliases($from) if defined $from;
($sender) = expand_aliases($sender) if defined $sender;
my $prompting = 0;
if (!defined $from) {
$from = $author || $committer;
if (!defined $sender) {
$sender = $repoauthor || $repocommitter;
do {
$_ = $term->readline("Who should the emails appear to be from? [$from] ");
$_ = $term->readline("Who should the emails appear to be from? [$sender] ");
} while (!defined $_);
$from = $_ if ($_);
print "Emails will be sent from: ", $from, "\n";
$sender = $_ if ($_);
print "Emails will be sent from: ", $sender, "\n";
$prompting++;
}
@ -330,7 +330,7 @@ sub expand_aliases {
# effort to have it be unique
open(C,">",$compose_filename)
or die "Failed to open for writing $compose_filename: $!";
print C "From $from # This line is ignored.\n";
print C "From $sender # This line is ignored.\n";
printf C "Subject: %s\n\n", $initial_subject;
printf C <<EOT;
GIT: Please enter your email below.
@ -433,11 +433,11 @@ sub make_message_id
my $date = time;
my $pseudo_rand = int (rand(4200));
my $du_part;
for ($from, $committer, $author) {
$du_part = extract_valid_address($_);
last if ($du_part ne '');
for ($sender, $repocommitter, $repoauthor) {
$du_part = extract_valid_address(sanitize_address($_));
last if (defined $du_part and $du_part ne '');
}
if ($du_part eq '') {
if (not defined $du_part or $du_part eq '') {
use Sys::Hostname qw();
$du_part = 'user@' . Sys::Hostname::hostname();
}
@ -508,10 +508,10 @@ sub send_message
if ($cc ne '') {
$ccline = "\nCc: $cc";
}
$from = sanitize_address($from);
my $sanitized_sender = sanitize_address($sender);
make_message_id();
my $header = "From: $from
my $header = "From: $sanitized_sender
To: $to${ccline}
Subject: $subject
Date: $date
@ -528,7 +528,7 @@ sub send_message
}
my @sendmail_parameters = ('-i', @recipients);
my $raw_from = $from;
my $raw_from = $sanitized_sender;
$raw_from = $envelope_sender if (defined $envelope_sender);
$raw_from = extract_valid_address($raw_from);
unshift (@sendmail_parameters,
@ -565,7 +565,7 @@ sub send_message
} else {
print "Sendmail: $smtp_server ".join(' ',@sendmail_parameters)."\n";
}
print "From: $from\nSubject: $subject\nCc: $cc\nTo: $to\n\n";
print "From: $sanitized_sender\nSubject: $subject\nCc: $cc\nTo: $to\n\n";
if ($smtp) {
print "Result: ", $smtp->code, ' ',
($smtp->message =~ /\n([^\n]+\n)$/s), "\n";
@ -582,7 +582,7 @@ sub send_message
foreach my $t (@files) {
open(F,"<",$t) or die "can't open file $t";
my $author_not_sender = undef;
my $author = undef;
@cc = @initial_cc;
@xh = ();
my $input_format = undef;
@ -604,12 +604,11 @@ sub send_message
$subject = $1;
} elsif (/^(Cc|From):\s+(.*)$/) {
if (unquote_rfc2047($2) eq $from) {
$from = $2;
if (unquote_rfc2047($2) eq $sender) {
next if ($suppress_from);
}
elsif ($1 eq 'From') {
$author_not_sender = $2;
$author = unquote_rfc2047($2);
}
printf("(mbox) Adding cc: %s from line '%s'\n",
$2, $_) unless $quiet;
@ -653,9 +652,8 @@ sub send_message
}
}
close F;
if (defined $author_not_sender) {
$author_not_sender = unquote_rfc2047($author_not_sender);
$message = "From: $author_not_sender\n\n$message";
if (defined $author) {
$message = "From: $author\n\n$message";
}