git-send-email: handle email address with quoted comma

Correctly handle email addresses containing quoted commas, e.g.

    "Zhu, Yi" <yi.zhu@intel.com>, "Li, Shaohua" <shaohua.li@intel.com>

The commas inside the double quotes are not separators.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Wu Fengguang 2008-12-19 16:10:10 +08:00 committed by Junio C Hamano
parent 04c8ce9c1c
commit 0e73b3ee6c
1 changed files with 8 additions and 3 deletions

View File

@ -20,6 +20,7 @@ use strict;
use warnings; use warnings;
use Term::ReadLine; use Term::ReadLine;
use Getopt::Long; use Getopt::Long;
use Text::ParseWords;
use Data::Dumper; use Data::Dumper;
use Term::ANSIColor; use Term::ANSIColor;
use Git; use Git;
@ -363,6 +364,10 @@ foreach my $entry (@bcclist) {
die "Comma in --bcclist entry: $entry'\n" unless $entry !~ m/,/; die "Comma in --bcclist entry: $entry'\n" unless $entry !~ m/,/;
} }


sub split_addrs {
return parse_line('\s*,\s*', 1, @_);
}

my %aliases; my %aliases;
my %parse_alias = ( my %parse_alias = (
# multiline formats can be supported in the future # multiline formats can be supported in the future
@ -371,7 +376,7 @@ my %parse_alias = (
my ($alias, $addr) = ($1, $2); my ($alias, $addr) = ($1, $2);
$addr =~ s/#.*$//; # mutt allows # comments $addr =~ s/#.*$//; # mutt allows # comments
# commas delimit multiple addresses # commas delimit multiple addresses
$aliases{$alias} = [ split(/\s*,\s*/, $addr) ]; $aliases{$alias} = [ split_addrs($addr) ];
}}}, }}},
mailrc => sub { my $fh = shift; while (<$fh>) { mailrc => sub { my $fh = shift; while (<$fh>) {
if (/^alias\s+(\S+)\s+(.*)$/) { if (/^alias\s+(\S+)\s+(.*)$/) {
@ -380,7 +385,7 @@ my %parse_alias = (
}}}, }}},
pine => sub { my $fh = shift; while (<$fh>) { pine => sub { my $fh = shift; while (<$fh>) {
if (/^(\S+)\t.*\t(.*)$/) { if (/^(\S+)\t.*\t(.*)$/) {
$aliases{$1} = [ split(/\s*,\s*/, $2) ]; $aliases{$1} = [ split_addrs($2) ];
}}}, }}},
gnus => sub { my $fh = shift; while (<$fh>) { gnus => sub { my $fh = shift; while (<$fh>) {
if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) { if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
@ -458,7 +463,7 @@ if (!@to) {
} }


my $to = $_; my $to = $_;
push @to, split /,\s*/, $to; push @to, split_addrs($to);
$prompting++; $prompting++;
} }