@@ -47,6 +47,8 @@ sub usage {
4747 --compose-encoding <str> * Encoding to assume for introduction.
4848 --8bit-encoding <str> * Encoding to assume 8bit mails if undeclared
4949 --transfer-encoding <str> * Transfer encoding to use (quoted-printable, 8bit, base64)
50+ --[no-]mailmap * Use mailmap file to map all email addresses to canonical
51+ real names and email addresses.
5052
5153 Sending:
5254 --envelope-sender <str> * Email envelope sender.
@@ -278,12 +280,14 @@ sub do_edit {
278280my ($auto_8bit_encoding );
279281my ($compose_encoding );
280282my ($sendmail_cmd );
283+ my ($mailmap_file , $mailmap_blob );
281284# Variables with corresponding config settings & hardcoded defaults
282285my ($debug_net_smtp ) = 0; # Net::SMTP, see send_message()
283286my $thread = 1;
284287my $chain_reply_to = 0;
285288my $use_xmailer = 1;
286289my $validate = 1;
290+ my $mailmap = 0;
287291my $target_xfer_encoding = ' auto' ;
288292my $forbid_sendmail_variables = 1;
289293
@@ -300,6 +304,7 @@ sub do_edit {
300304 " annotate" => \$annotate ,
301305 " xmailer" => \$use_xmailer ,
302306 " forbidsendmailvariables" => \$forbid_sendmail_variables ,
307+ " mailmap" => \$mailmap ,
303308);
304309
305310my %config_settings = (
@@ -333,6 +338,8 @@ sub do_edit {
333338my %config_path_settings = (
334339 " aliasesfile" => \@alias_files ,
335340 " smtpsslcertpath" => \$smtp_ssl_cert_path ,
341+ " mailmap.file" => \$mailmap_file ,
342+ " mailmap.blob" => \$mailmap_blob ,
336343);
337344
338345# Handle Uncouth Termination
@@ -533,6 +540,8 @@ sub config_regexp {
533540 " thread!" => \$thread ,
534541 " validate!" => \$validate ,
535542 " transfer-encoding=s" => \$target_xfer_encoding ,
543+ " mailmap!" => \$mailmap ,
544+ " use-mailmap!" => \$mailmap ,
536545 " format-patch!" => \$format_patch ,
537546 " 8bit-encoding=s" => \$auto_8bit_encoding ,
538547 " compose-encoding=s" => \$compose_encoding ,
@@ -1104,6 +1113,16 @@ sub expand_one_alias {
11041113our ($message_id, %mail, $subject, $in_reply_to, $references, $message,
11051114 $needs_confirm, $message_num, $ask_default);
11061115
1116+ sub mailmap_address_list {
1117+ return @_ unless @_ and $mailmap;
1118+ my @options = ();
1119+ push(@options, "--mailmap-file=$mailmap_file") if $mailmap_file;
1120+ push(@options, "--mailmap-blob=$mailmap_blob") if $mailmap_blob;
1121+ my @addr_list = Git::command(' check-mailmap' , @options, @_);
1122+ s/^<(.*)>$/$1/ for @addr_list;
1123+ return @addr_list;
1124+ }
1125+
11071126sub extract_valid_address {
11081127 my $address = shift;
11091128 my $local_part_regexp = qr/[^<>"\s@]+/;
@@ -1313,6 +1332,7 @@ sub process_address_list {
13131332 @addr_list = expand_aliases(@addr_list );
13141333 @addr_list = sanitize_address_list(@addr_list );
13151334 @addr_list = validate_address_list(@addr_list );
1335+ @addr_list = mailmap_address_list(@addr_list );
13161336 return @addr_list ;
13171337}
13181338
0 commit comments