Getting rid of Mail::Address regressed behaviour with common get_maintainer scripts such as the Linux kernel. Fix the missed corner case and add a test for it. Fixes: cc9075067776ebd34cc08f31bf78bb05f12fd879 Signed-off-by: Alex Bennée <alex.bennee@xxxxxxxxxx> --- perl/Git.pm | 3 +++ t/t9000/test.pl | 4 +++- t/t9001-send-email.sh | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/perl/Git.pm b/perl/Git.pm index ffa09ace9..9b17de1cc 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -936,6 +936,9 @@ sub parse_mailboxes { $end_of_addr_seen = 0; } elsif ($token =~ /^\(/) { push @comment, $token; + } elsif ($token =~ /^\)/) { + my $nested_comment = pop @comment; + push @comment, "$nested_comment$token"; } elsif ($token eq "<") { push @phrase, (splice @address), (splice @buffer); } elsif ($token eq ">") { diff --git a/t/t9000/test.pl b/t/t9000/test.pl index dfeaa9c65..f10be50cd 100755 --- a/t/t9000/test.pl +++ b/t/t9000/test.pl @@ -35,7 +35,9 @@ my @success_list = (q[Jane], q['Jane 'Doe' <jdoe@xxxxxxxxxxx>], q[Jane@:;\.,()<>Doe <jdoe@xxxxxxxxxxx>], q[Jane <jdoe@xxxxxxxxxxx> Doe], - q[<jdoe@xxxxxxxxxxx> Jane Doe]); + q[<jdoe@xxxxxxxxxxx> Jane Doe], + q[jdoe@xxxxxxxxxxx (open list:for thing (foo/bar))], + ); my @known_failure_list = (q[Jane\ Doe <jdoe@xxxxxxxxxxx>], q["Doe, Ja"ne <jdoe@xxxxxxxxxxx>], diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 4d261c2a9..0bcd7ab96 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -172,6 +172,27 @@ test_expect_success $PREREQ 'cc trailer with various syntax' ' test_cmp expected-cc commandline1 ' +test_expect_success $PREREQ 'setup get_mainter script for cc trailer' " +cat >expected-cc-script.sh <<-EOF && chmod +x expected-cc-script.sh +#!/bin/sh +echo 'One Person <one@xxxxxxxxxxx> (supporter:THIS (FOO/bar))' +echo 'Two Person <two@xxxxxxxxxxx> (maintainer:THIS THING)' +echo 'Third List <three@xxxxxxxxxxx> (moderated list:THIS THING (FOO/bar))' +echo '<four@xxxxxxxxxxx> (moderated list:FOR THING)' +echo 'five@xxxxxxxxxxx (open list:FOR THING (FOO/bar))' +echo 'six@xxxxxxxxxxx (open list)' +EOF +" + +test_expect_success $PREREQ 'cc trailer with get_maintainer output' ' + test_commit cc-trailer && + clean_fake_sendmail && + git send-email -1 --to=recipient@xxxxxxxxxxx \ + --cc-cmd="$(pwd)/expected-cc-script.sh" \ + --smtp-server="$(pwd)/fake.sendmail" && + test_cmp expected-cc commandline1 +' + test_expect_success $PREREQ 'setup expect' " cat >expected-show-all-headers <<\EOF 0001-Second.patch -- 2.15.0