]> git.ipfire.org Git - thirdparty/git.git/commitdiff
send-email: add sendmail email aliases format
authorAllen Hubbe <allenbh@gmail.com>
Tue, 26 May 2015 21:32:03 +0000 (17:32 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 May 2015 20:01:48 +0000 (13:01 -0700)
Teach send-email to read aliases in the sendmail aliases format, i.e.

<alias>: <address|alias>[, <address|alias>...]

Examples:

alice: Alice W Land <awol@example.com>
bob: Robert Bobbyton <bob@example.com>
# this is a comment
   # this is also a comment
chloe: chloe@example.com
abgroup: alice, bob
bcgrp: bob, chloe, Other <o@example.com>

 - Quoted aliases and quoted addresses are not supported.
 - Line continuations are not supported.

Warnings are printed for explicitly unsupported constructs, and any
other lines that are not matched by the parser.

Signed-off-by: Allen Hubbe <allenbh@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-send-email.txt
git-send-email.perl
t/t9001-send-email.sh

index 804554609def705bee51e9be087623233c857935..b48a76432030e7c72b9d75a6b879b6e614458859 100644 (file)
@@ -383,7 +383,23 @@ sendemail.aliasesFile::
 
 sendemail.aliasFileType::
        Format of the file(s) specified in sendemail.aliasesFile. Must be
-       one of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'.
+       one of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus', or 'sendmail'.
++
+What an alias file in each format looks like can be found in
+the documentation of the email program of the same name. The
+differences and limitations from the standard formats are
+described below:
++
+--
+sendmail;;
+*      Quoted aliases and quoted addresses are not supported: lines that
+       contain a `"` symbol are ignored.
+*      Line continuations are not supported: lines that start with
+       whitespace characters, or end with a `\` symbol are ignored.
+*      Warnings are printed on the standard error output for any
+       explicitly unsupported constructs, and any other lines that are not
+       recognized by the parser.
+--
 
 sendemail.multiEdit::
        If true (default), a single editor instance will be spawned to edit
index e1e9b1460ced5f660b32796890df7336bc3d01af..6bedf745e72d3935f7feaae2cfca95d44a3e6df5 100755 (executable)
@@ -516,6 +516,31 @@ my %parse_alias = (
                          }
                      } },
 
+       sendmail => sub { my $fh = shift; while (<$fh>) {
+               # ignore blank lines and comment lines
+               if (/^\s*(?:#.*)?$/) { }
+
+               # warn on lines that contain quotes
+               elsif (/"/) {
+                       print STDERR "sendmail alias with quotes is not supported: $_\n";
+               }
+
+               # warn on lines that continue
+               elsif (/^\s|\\$/) {
+                       print STDERR "sendmail continuation line is not supported: $_\n";
+               }
+
+               # recognize lines that look like an alias
+               elsif (/^(\S+?)\s*:\s*(.+)$/) {
+                       my ($alias, $addr) = ($1, $2);
+                       $aliases{$alias} = [ split_addrs($addr) ];
+               }
+
+               # warn on lines that are not recognized
+               else {
+                       print STDERR "sendmail line is not recognized: $_\n";
+               }}},
+
        gnus => sub { my $fh = shift; while (<$fh>) {
                if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
                        $aliases{$1} = [ $2 ];
index 7be14a4e37f7843d9a9863a21e9181ffeceee11b..01c7ef4d9b67bc7e0b8eaa538711d688db149199 100755 (executable)
@@ -1549,6 +1549,33 @@ test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '
        grep "^!someone@example\.org!$" commandline1
 '
 
+test_expect_success $PREREQ 'sendemail.aliasfiletype=sendmail' '
+       clean_fake_sendmail && rm -fr outdir &&
+       git format-patch -1 -o outdir &&
+       cat >>.tmp-email-aliases <<-\EOF &&
+       alice: Alice W Land <awol@example.com>
+       bob: Robert Bobbyton <bob@example.com>
+       # this is a comment
+          # this is also a comment
+       chloe: chloe@example.com
+       abgroup: alice, bob
+       bcgrp: bob, chloe, Other <o@example.com>
+       EOF
+       git config --replace-all sendemail.aliasesfile \
+               "$(pwd)/.tmp-email-aliases" &&
+       git config sendemail.aliasfiletype sendmail &&
+       git send-email \
+               --from="Example <nobody@example.com>" \
+               --to=alice --to=bcgrp \
+               --smtp-server="$(pwd)/fake.sendmail" \
+               outdir/0001-*.patch \
+               2>errors >out &&
+       grep "^!awol@example\.com!$" commandline1 &&
+       grep "^!bob@example\.com!$" commandline1 &&
+       grep "^!chloe@example\.com!$" commandline1 &&
+       grep "^!o@example\.com!$" commandline1
+'
+
 do_xmailer_test () {
        expected=$1 params=$2 &&
        git format-patch -1 &&