Merge branch 'ah/send-email-sendmail-alias'

"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
This commit is contained in:
Junio C Hamano 2015-06-16 14:27:04 -07:00
commit 412e63f0fd
3 changed files with 70 additions and 2 deletions

View 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

View file

@ -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 ];

View file

@ -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 &&