send-email: refactor sendmail aliases parser
authorEric Sunshine <sunshine@sunshineco.com>
Sun, 31 May 2015 22:29:27 +0000 (18:29 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Jun 2015 22:52:49 +0000 (15:52 -0700)
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>
git-send-email.perl
index 1380e6e163fc300b828160c0ee5c1229bace8ad1..76bb499fbbb3d99b9d5a6a378586c31bce838db2 100755 (executable)
@@ -487,6 +487,29 @@ sub split_addrs {
 }
 
 my %aliases;
+
+sub parse_sendmail_alias {
+       local $_ = shift;
+       if (/"/) {
+               print STDERR "warning: sendmail alias with quotes is not supported: $_\n";
+       } elsif (/^\s|\\$/) {
+               print STDERR "warning: sendmail continuation line is not supported: $_\n";
+       } elsif (/^(\S+?)\s*:\s*(.+)$/) {
+               my ($alias, $addr) = ($1, $2);
+               $aliases{$alias} = [ split_addrs($addr) ];
+       } else {
+               print STDERR "warning: sendmail line is not recognized: $_\n";
+       }
+}
+
+sub parse_sendmail_aliases {
+       my $fh = shift;
+       while (<$fh>) {
+               if (/^\s*(?:#.*)?$/) { next; }
+               parse_sendmail_alias($_);
+       }
+}
+
 my %parse_alias = (
        # multiline formats can be supported in the future
        mutt => sub { my $fh = shift; while (<$fh>) {
@@ -515,20 +538,7 @@ sub split_addrs {
                               $aliases{$alias} = [ split_addrs($addr) ];
                          }
                      } },
-
-       sendmail => sub { my $fh = shift; while (<$fh>) {
-               if (/^\s*(?:#.*)?$/) {
-               } elsif (/"/) {
-                       print STDERR "warning: sendmail alias with quotes is not supported: $_\n";
-               } elsif (/^\s|\\$/) {
-                       print STDERR "warning: sendmail continuation line is not supported: $_\n";
-               } elsif (/^(\S+?)\s*:\s*(.+)$/) {
-                       my ($alias, $addr) = ($1, $2);
-                       $aliases{$alias} = [ split_addrs($addr) ];
-               } else {
-                       print STDERR "warning: sendmail line is not recognized: $_\n";
-               }}},
-
+       sendmail => \&parse_sendmail_aliases,
        gnus => sub { my $fh = shift; while (<$fh>) {
                if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
                        $aliases{$1} = [ $2 ];