send-email: refactor sendmail aliases parser

The sendmail aliases parser inlined into %parse_alias is already uncomfortably large and is expected to grow as additional functionality is implemented, so extract it to improve manageability. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Eric Sunshine committed May 31, 2015 at 18:29 UTC 09f1157bbf5daa8a4fd8de1d25edbb8961d44521
1 file changed +24 -14
git-send-email.perl
+24 -14
@@ -487,6 +487,29 @@ sub split_addrs {
487 }
488
489 my %aliases;
490 +
491 +sub parse_sendmail_alias {
492 + local $_ = shift;
493 + if (/"/) {
494 + print STDERR "warning: sendmail alias with quotes is not supported: $_\n";
495 + } elsif (/^\s|\\$/) {
496 + print STDERR "warning: sendmail continuation line is not supported: $_\n";
497 + } elsif (/^(\S+?)\s*:\s*(.+)$/) {
498 + my ($alias, $addr) = ($1, $2);
499 + $aliases{$alias} = [ split_addrs($addr) ];
500 + } else {
501 + print STDERR "warning: sendmail line is not recognized: $_\n";
502 + }
503 +}
504 +
505 +sub parse_sendmail_aliases {
506 + my $fh = shift;
507 + while (<$fh>) {
508 + if (/^\s*(?:#.*)?$/) { next; }
509 + parse_sendmail_alias($_);
510 + }
511 +}
512 +
513 my %parse_alias = (
514 # multiline formats can be supported in the future
515 mutt => sub { my $fh = shift; while (<$fh>) {
@@ -515,20 +538,7 @@ my %parse_alias = (
538 $aliases{$alias} = [ split_addrs($addr) ];
539 }
540 } },
518 -
519 - sendmail => sub { my $fh = shift; while (<$fh>) {
520 - if (/^\s*(?:#.*)?$/) {
521 - } elsif (/"/) {
522 - print STDERR "warning: sendmail alias with quotes is not supported: $_\n";
523 - } elsif (/^\s|\\$/) {
524 - print STDERR "warning: sendmail continuation line is not supported: $_\n";
525 - } elsif (/^(\S+?)\s*:\s*(.+)$/) {
526 - my ($alias, $addr) = ($1, $2);
527 - $aliases{$alias} = [ split_addrs($addr) ];
528 - } else {
529 - print STDERR "warning: sendmail line is not recognized: $_\n";
530 - }}},
531 -
541 + sendmail => \&parse_sendmail_aliases,
542 gnus => sub { my $fh = shift; while (<$fh>) {
543 if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
544 $aliases{$1} = [ $2 ];