Merge branch 'ah/send-email-sendmail-alias'
authorJunio C Hamano <gitster@pobox.com>
Tue, 16 Jun 2015 21:27:04 +0000 (14:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 16 Jun 2015 21:27:04 +0000 (14:27 -0700)
"git send-email" learned the alias file format used by the sendmail
program (in an abbreviated form).

* ah/send-email-sendmail-alias:
t9001: write $HOME/, not ~/, to help shells without tilde expansion
send-email: add sendmail email aliases format

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 @@ sub split_addrs {
                          }
                      } },
 
+       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..a3663da49ba075c14d6aa66c3cd3d9eb0c7d2f62 100755 (executable)
@@ -1537,7 +1537,7 @@ test_expect_success $PREREQ 'sendemail.aliasfiletype=mailrc' '
 
 test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '
        clean_fake_sendmail &&
-       echo "alias sbd  someone@example.org" >~/.mailrc &&
+       echo "alias sbd  someone@example.org" >"$HOME/.mailrc" &&
        git config --replace-all sendemail.aliasesfile "~/.mailrc" &&
        git config sendemail.aliasfiletype mailrc &&
        git send-email \
@@ -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 &&