git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 1/1] send-email: Add sendmail email aliases format

From
Allen Hubbe <allenbh@gmail.com>
Date
May 23, 2015, 13:21 UTC
Message-ID
<49e9a95b52aa61ed4f37edf1dfa178186acb4a29.1432367540.git.allenbh@gmail.com>

Note that this only adds support for a limited subset of the sendmail format. The format is is as follows.

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

Aliases are specified one per line, and must start on the first column of the line. Blank lines are ignored. If the first non whitespace character on a line is a '#' symbol, then the whole line is considered a comment, and is ignored.

Example:
	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>

Unlike the standard sendmail format, this does not support quoted aliases or quoted addresses. Line continuations are not supported. Warnings are printed for explicitly unsupported constructs, and any other lines that are not recognized.

Signed-off-by: Allen Hubbe <allenbh@gmail.com>
---
Notes:
    This v5 renames the parser 'sendmail' again, from 'simple'.
    Therefore, the subject line is changed again, too.
    
    Previous subject line: send-email: Add simple email aliases format
    
    The format is restricted to a subset of sendmail.  When the subset
    diverges from sendmail, the parser warns about the line that diverges,
    and ignores the line.  The supported format is described in the
    documentation, as well as the behavior when an unsupported format
    construct is detected.
    
    A badly constructed sentence was corrected in the documentation.
    
    The test case was changed to use a here document, and the unsupported
    comment after an alias was removed from the test case alias file input.
 Documentation/git-send-email.txt | 37 ++++++++++++++++++++++++++++++++++++-
 git-send-email.perl              | 29 +++++++++++++++++++++++++++++
 t/t9001-send-email.sh            | 27 +++++++++++++++++++++++++++
 3 files changed, 92 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 804554609def..97387fd27a8d 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -383,7 +383,42 @@ 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 'sendmail', 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'.
++
+If the format is 'sendmail', then the alias file format is described below.
+Descriptions of the other file formats can be found by searching the
+documentation of the email program of the same name.
++
+The 'sendmail' format is is as follows.  Note that 'git-send-email' currently
+only supports a limited subset of the sendmail format.
++
+	<alias>: <address|alias>[, <address|alias>...]
++
+Aliases are specified one per line, and must start on the first column of the
+line.  Blank lines are ignored.  If the first non whitespace character on a
+line is a `#` symbol, then the whole line is considered a comment, and is
+ignored.
++
+Example of the 'sendmail' format:
++
+	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>
++
+Unlike the standard sendmail format, 'git-send-email' currently diverges in the
+following ways.
++
+*	Quoted aliases and quoted addresses are not supported: lines that
+	contain a `"` symbol are ignored.
+*	Line continuations are not supported: any lines that start with
+	whitespace, 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
diff --git a/git-send-email.perl b/git-send-email.perl
index e1e9b1460ced..ffea50094a48 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -487,6 +487,8 @@ sub split_addrs {
 }
 
 my %aliases;
+
+
 my %parse_alias = (
 	# multiline formats can be supported in the future
 	mutt => sub { my $fh = shift; while (<$fh>) {
@@ -516,6 +518,33 @@ my %parse_alias = (
 			  }
 		      } },
 
+	sendmail => sub { my $fh = shift; while (<$fh>) {
+		# ignore comment lines
+		if (/^\s*(?:#.*)?$/) { }
+
+		# warn on lines that contain quotes
+		elsif (/"/) {
+			print STDERR "sendmail alias with quotes is not supported: $_\n";
+			next;
+		}
+
+		# warn on lines that continue
+		elsif (/^\s|\\$/) {
+			print STDERR "sendmail continuation line is not supported: $_\n";
+			next;
+		}
+
+		# 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 ];
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 7be14a4e37f7..b04d26364767 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -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 &&
-- 
2.3.4
Next: Junio C Hamano
Message 1 of 20 in “send-email: Add sendmail email aliases format”
  1. 1/1 send-email: Add sendmail email aliases formatAllen Hubbe, May 23, 2015
  2. Junio C HamanoMay 23, 2015
  3. Junio C HamanoMay 23, 2015
  4. Allen HubbeMay 23, 2015
  5. Junio C HamanoMay 23, 2015
  6. Allen HubbeMay 23, 2015
  7. Allen HubbeMay 25, 2015
  8. Junio C HamanoMay 25, 2015
  9. Junio C HamanoMay 25, 2015
  10. Junio C HamanoMay 25, 2015
  11. Allen HubbeMay 26, 2015
  12. Junio C HamanoMay 26, 2015
  13. Allen HubbeMay 26, 2015
  14. Junio C HamanoMay 26, 2015
  15. Junio C HamanoMay 26, 2015
  16. Eric SunshineMay 26, 2015
  17. Eric SunshineMay 26, 2015
  18. Allen HubbeMay 26, 2015
  19. Eric SunshineMay 26, 2015
  20. Allen HubbeMay 26, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.