{"thread":{"id":"39402","subject":"[PATCH v2] send-email: Add simple email aliases format","startedAt":"2015-05-22T00:16:00Z","lastAt":"2015-05-22T12:15:02Z","messageCount":5,"participants":["Allen Hubbe","Eric Sunshine"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"261865","messageId":"4b56f6ab3c14aff7752804d11917b1f330f55f40.1432252898.git.allenbh@gmail.com","threadId":"39402","inReplyTo":null,"subject":"[PATCH v2] send-email: Add simple email aliases format","fromName":"Allen Hubbe","fromEmail":"allenbh@gmail.com","sentAt":"2015-05-22T00:16:00Z","receivedAt":"2015-05-22T00:16:00Z","isPatch":true,"sender":{"key":"allenbh@gmail.com","avatar":"https://avatars.githubusercontent.com/u/812915?v=4"},"body":"This format is more simple than the other alias file formats, so it may\nbe preferred by some users.  The format is as follows.\n\n<alias>: <address|alias>[, <address|alias>...]\n\nAliases are specified one per line.  There is no line splitting.\n\nExample:\n\talice: Alice W Land <awol@example.com>\n\tbob: Robert Bobbyton <bob@example.com>\n\tchloe: chloe@example.com\n\tabgroup: alice, bob\n\tbcgrp: bob, chloe, Other <o@example.com>\n\nSigned-off-by: Allen Hubbe <allenbh@gmail.com>\n---\n\nNotes:\n    The v1 of this patch had the following subject line:\n    git-send-email.perl: Add sendmail aliases support\n    \n    This v2 renames this email alias format to simple, because the syntax\n    that is actually supported by the parser differs from the format used by\n    sendmail.  Now, there is no mention of sendmail in the name of the\n    format, the documentation, or the commit message.\n    \n    This v2 also adds a test case to t/t9001-send-email.sh, and updates the\n    list of alias file types in Documentation/git-send-email.txt.\n\n Documentation/git-send-email.txt |  2 +-\n git-send-email.perl              |  6 +++++-\n t/t9001-send-email.sh            | 24 ++++++++++++++++++++++++\n 3 files changed, 30 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt\nindex 804554609def..99583c4f8969 100644\n--- a/Documentation/git-send-email.txt\n+++ b/Documentation/git-send-email.txt\n@@ -383,7 +383,7 @@ sendemail.aliasesFile::\n \n sendemail.aliasFileType::\n \tFormat of the file(s) specified in sendemail.aliasesFile. Must be\n-\tone of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'.\n+\tone of 'mutt', 'mailrc', 'pine', 'elm', 'gnus', or 'simple'.\n \n sendemail.multiEdit::\n \tIf true (default), a single editor instance will be spawned to edit\ndiff --git a/git-send-email.perl b/git-send-email.perl\nindex e1e9b1460ced..25d72e8db8bf 100755\n--- a/git-send-email.perl\n+++ b/git-send-email.perl\n@@ -515,7 +515,11 @@ my %parse_alias = (\n \t\t\t       $aliases{$alias} = [ split_addrs($addr) ];\n \t\t\t  }\n \t\t      } },\n-\n+\tsimple => sub { my $fh = shift; while (<$fh>) {\n+\t\tif (/^\\s*(\\S+)\\s*:\\s*(.+)$/) {\n+\t\t\tmy ($alias, $addr) = ($1, $2);\n+\t\t\t$aliases{$alias} = [ split_addrs($addr) ];\n+\t\t}}},\n \tgnus => sub { my $fh = shift; while (<$fh>) {\n \t\tif (/\\(define-mail-alias\\s+\"(\\S+?)\"\\s+\"(\\S+?)\"\\)/) {\n \t\t\t$aliases{$1} = [ $2 ];\ndiff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh\nindex 7be14a4e37f7..bbb73cdf8bec 100755\n--- a/t/t9001-send-email.sh\n+++ b/t/t9001-send-email.sh\n@@ -1548,6 +1548,30 @@ test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '\n \t\t2>errors >out &&\n \tgrep \"^!someone@example\\.org!$\" commandline1\n '\n+test_expect_success $PREREQ 'sendemail.aliasfiletype=simple' '\n+\tclean_fake_sendmail && rm -fr outdir &&\n+\tgit format-patch -1 -o outdir &&\n+\t{\n+\t\techo \"alice: Alice W Land <awol@example.com>\"\n+\t\techo \"bob: Robert Bobbyton <bob@example.com>\"\n+\t\techo \"chloe: chloe@example.com\"\n+\t\techo \"abgroup: alice, bob\"\n+\t\techo \"bcgrp: bob, chloe, Other <o@example.com>\"\n+\t} >~/.tmp-email-aliases &&\n+\tgit config --replace-all sendemail.aliasesfile \\\n+\t\t\"$(pwd)/.tmp-email-aliases\" &&\n+\tgit config sendemail.aliasfiletype simple &&\n+\tgit send-email \\\n+\t\t--from=\"Example <nobody@example.com>\" \\\n+\t\t--to=alice --to=bcgrp \\\n+\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n+\t\toutdir/0001-*.patch \\\n+\t\t2>errors >out &&\n+\tgrep \"^!awol@example\\.com!$\" commandline1 &&\n+\tgrep \"^!bob@example\\.com!$\" commandline1 &&\n+\tgrep \"^!chloe@example\\.com!$\" commandline1 &&\n+\tgrep \"^!o@example\\.com!$\" commandline1\n+'\n \n do_xmailer_test () {\n \texpected=$1 params=$2 &&\n-- \n2.3.4\n"},{"id":"261873","messageId":"CAPig+cQ8Gw3Q1QcJ=k4647LW1gBZ3fuJBYpOCE=AxA0ZWtktmQ@mail.gmail.com","threadId":"39402","inReplyTo":"4b56f6ab3c14aff7752804d11917b1f330f55f40.1432252898.git.allenbh@gmail.com","subject":"Re: [PATCH v2] send-email: Add simple email aliases format","fromName":"Eric Sunshine","fromEmail":"sunshine@sunshineco.com","sentAt":"2015-05-22T01:05:12Z","receivedAt":"2015-05-22T01:05:12Z","isPatch":true,"sender":{"key":"sunshine@sunshineco.com","avatar":"https://avatars.githubusercontent.com/u/163641?v=4"},"body":"On Thu, May 21, 2015 at 8:16 PM, Allen Hubbe <allenbh@gmail.com> wrote:\n> This format is more simple than the other alias file formats, so it may\n> be preferred by some users.  The format is as follows.\n>\n> <alias>: <address|alias>[, <address|alias>...]\n>\n> Aliases are specified one per line.  There is no line splitting.\n>\n> Example:\n>         alice: Alice W Land <awol@example.com>\n>         bob: Robert Bobbyton <bob@example.com>\n>         chloe: chloe@example.com\n>         abgroup: alice, bob\n>         bcgrp: bob, chloe, Other <o@example.com>\n>\n> Signed-off-by: Allen Hubbe <allenbh@gmail.com>\n> ---\n> diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt\n> index 804554609def..99583c4f8969 100644\n> --- a/Documentation/git-send-email.txt\n> +++ b/Documentation/git-send-email.txt\n> @@ -383,7 +383,7 @@ sendemail.aliasesFile::\n>\n>  sendemail.aliasFileType::\n>         Format of the file(s) specified in sendemail.aliasesFile. Must be\n> -       one of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'.\n> +       one of 'mutt', 'mailrc', 'pine', 'elm', 'gnus', or 'simple'.\n\nIt's perhaps somewhat unfortunate that the formats of the other alias\nfile types aren't described here, however, the reader can at least\nlook them up. But the new \"simple\" format is never described anywhere\nin the documentation, so it's effectively unusable. Most users will be\nunable or unwilling to consult the source code or the commit message\nto figure out how to use this format. The description you wrote for\nthe commit message might be sufficient as proper documentation (with\nproper Asciidoc formatting, of course).\n\n>  sendemail.multiEdit::\n>         If true (default), a single editor instance will be spawned to edit\n> diff --git a/git-send-email.perl b/git-send-email.perl\n> index e1e9b1460ced..25d72e8db8bf 100755\n> --- a/git-send-email.perl\n> +++ b/git-send-email.perl\n> @@ -515,7 +515,11 @@ my %parse_alias = (\n>                                $aliases{$alias} = [ split_addrs($addr) ];\n>                           }\n>                       } },\n> -\n> +       simple => sub { my $fh = shift; while (<$fh>) {\n> +               if (/^\\s*(\\S+)\\s*:\\s*(.+)$/) {\n\nI imagine that users would appreciate being able to add comments to\ntheir aliases file, and the implementation complexity to support\ncomment lines and blank lines (as described in the Postfix aliases\ndocumentation you cited earlier[1]) would be so minor that I'm rather\nsurprised you chose not to do so.\n\n[1]: http://www.postfix.org/aliases.5.html\n\n> +                       my ($alias, $addr) = ($1, $2);\n> +                       $aliases{$alias} = [ split_addrs($addr) ];\n> +               }}},\n>         gnus => sub { my $fh = shift; while (<$fh>) {\n>                 if (/\\(define-mail-alias\\s+\"(\\S+?)\"\\s+\"(\\S+?)\"\\)/) {\n>                         $aliases{$1} = [ $2 ];\n> diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh\n> index 7be14a4e37f7..bbb73cdf8bec 100755\n> --- a/t/t9001-send-email.sh\n> +++ b/t/t9001-send-email.sh\n> @@ -1548,6 +1548,30 @@ test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '\n>                 2>errors >out &&\n>         grep \"^!someone@example\\.org!$\" commandline1\n>  '\n> +test_expect_success $PREREQ 'sendemail.aliasfiletype=simple' '\n> +       clean_fake_sendmail && rm -fr outdir &&\n> +       git format-patch -1 -o outdir &&\n> +       {\n> +               echo \"alice: Alice W Land <awol@example.com>\"\n> +               echo \"bob: Robert Bobbyton <bob@example.com>\"\n> +               echo \"chloe: chloe@example.com\"\n> +               echo \"abgroup: alice, bob\"\n> +               echo \"bcgrp: bob, chloe, Other <o@example.com>\"\n> +       } >~/.tmp-email-aliases &&\n\nA here-doc would be easier to maintain and read:\n\n    cat >~/.tmp-email-aliases <<-\\EOF &&\n        alice: Alice W Land <awol@example.com>\n        bob: Robert Bobbyton <bob@example.com>\n        ...\n    EOF\n\n> +       git config --replace-all sendemail.aliasesfile \\\n> +               \"$(pwd)/.tmp-email-aliases\" &&\n> +       git config sendemail.aliasfiletype simple &&\n> +       git send-email \\\n> +               --from=\"Example <nobody@example.com>\" \\\n> +               --to=alice --to=bcgrp \\\n> +               --smtp-server=\"$(pwd)/fake.sendmail\" \\\n> +               outdir/0001-*.patch \\\n> +               2>errors >out &&\n> +       grep \"^!awol@example\\.com!$\" commandline1 &&\n> +       grep \"^!bob@example\\.com!$\" commandline1 &&\n> +       grep \"^!chloe@example\\.com!$\" commandline1 &&\n> +       grep \"^!o@example\\.com!$\" commandline1\n> +'\n>\n>  do_xmailer_test () {\n>         expected=$1 params=$2 &&\n> --\n> 2.3.4\n"},{"id":"261875","messageId":"CAJ80savXAOMAbdDC_F77esD1Fdi=BP6GK4biFOLJTtqqehjEOw@mail.gmail.com","threadId":"39402","inReplyTo":"CAPig+cQ8Gw3Q1QcJ=k4647LW1gBZ3fuJBYpOCE=AxA0ZWtktmQ@mail.gmail.com","subject":"Re: [PATCH v2] send-email: Add simple email aliases format","fromName":"Allen Hubbe","fromEmail":"allenbh@gmail.com","sentAt":"2015-05-22T03:19:29Z","receivedAt":"2015-05-22T03:19:29Z","isPatch":true,"sender":{"key":"allenbh@gmail.com","avatar":"https://avatars.githubusercontent.com/u/812915?v=4"},"body":"On May 21, 2015 9:05 PM, \"Eric Sunshine\" <sunshine@sunshineco.com> wrote:\n>\n> On Thu, May 21, 2015 at 8:16 PM, Allen Hubbe <allenbh@gmail.com> wrote:\n> > This format is more simple than the other alias file formats, so it may\n> > be preferred by some users.  The format is as follows.\n> >\n> > <alias>: <address|alias>[, <address|alias>...]\n> >\n> > Aliases are specified one per line.  There is no line splitting.\n> >\n> > Example:\n> >         alice: Alice W Land <awol@example.com>\n> >         bob: Robert Bobbyton <bob@example.com>\n> >         chloe: chloe@example.com\n> >         abgroup: alice, bob\n> >         bcgrp: bob, chloe, Other <o@example.com>\n> >\n> > Signed-off-by: Allen Hubbe <allenbh@gmail.com>\n> > ---\n> > diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt\n> > index 804554609def..99583c4f8969 100644\n> > --- a/Documentation/git-send-email.txt\n> > +++ b/Documentation/git-send-email.txt\n> > @@ -383,7 +383,7 @@ sendemail.aliasesFile::\n> >\n> >  sendemail.aliasFileType::\n> >         Format of the file(s) specified in sendemail.aliasesFile. Must be\n> > -       one of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'.\n> > +       one of 'mutt', 'mailrc', 'pine', 'elm', 'gnus', or 'simple'.\n>\n> It's perhaps somewhat unfortunate that the formats of the other alias\n> file types aren't described here, however, the reader can at least\n> look them up. But the new \"simple\" format is never described anywhere\n> in the documentation, so it's effectively unusable. Most users will be\n> unable or unwilling to consult the source code or the commit message\n> to figure out how to use this format. The description you wrote for\n> the commit message might be sufficient as proper documentation (with\n> proper Asciidoc formatting, of course).\n\nOk, I will add the description in the commit, formatted, to the documentation.\n\n>\n> >  sendemail.multiEdit::\n> >         If true (default), a single editor instance will be spawned to edit\n> > diff --git a/git-send-email.perl b/git-send-email.perl\n> > index e1e9b1460ced..25d72e8db8bf 100755\n> > --- a/git-send-email.perl\n> > +++ b/git-send-email.perl\n> > @@ -515,7 +515,11 @@ my %parse_alias = (\n> >                                $aliases{$alias} = [ split_addrs($addr) ];\n> >                           }\n> >                       } },\n> > -\n> > +       simple => sub { my $fh = shift; while (<$fh>) {\n> > +               if (/^\\s*(\\S+)\\s*:\\s*(.+)$/) {\n>\n> I imagine that users would appreciate being able to add comments to\n> their aliases file, and the implementation complexity to support\n> comment lines and blank lines (as described in the Postfix aliases\n> documentation you cited earlier[1]) would be so minor that I'm rather\n> surprised you chose not to do so.\n\nI will add support for comments. Anything after the first '#' in any\nline will be treated as a comment.\n\n>\n> [1]: http://www.postfix.org/aliases.5.html\n>\n> > +                       my ($alias, $addr) = ($1, $2);\n> > +                       $aliases{$alias} = [ split_addrs($addr) ];\n> > +               }}},\n> >         gnus => sub { my $fh = shift; while (<$fh>) {\n> >                 if (/\\(define-mail-alias\\s+\"(\\S+?)\"\\s+\"(\\S+?)\"\\)/) {\n> >                         $aliases{$1} = [ $2 ];\n> > diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh\n> > index 7be14a4e37f7..bbb73cdf8bec 100755\n> > --- a/t/t9001-send-email.sh\n> > +++ b/t/t9001-send-email.sh\n> > @@ -1548,6 +1548,30 @@ test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '\n> >                 2>errors >out &&\n> >         grep \"^!someone@example\\.org!$\" commandline1\n> >  '\n> > +test_expect_success $PREREQ 'sendemail.aliasfiletype=simple' '\n> > +       clean_fake_sendmail && rm -fr outdir &&\n> > +       git format-patch -1 -o outdir &&\n> > +       {\n> > +               echo \"alice: Alice W Land <awol@example.com>\"\n> > +               echo \"bob: Robert Bobbyton <bob@example.com>\"\n> > +               echo \"chloe: chloe@example.com\"\n> > +               echo \"abgroup: alice, bob\"\n> > +               echo \"bcgrp: bob, chloe, Other <o@example.com>\"\n> > +       } >~/.tmp-email-aliases &&\n>\n> A here-doc would be easier to maintain and read:\n>\n>     cat >~/.tmp-email-aliases <<-\\EOF &&\n>         alice: Alice W Land <awol@example.com>\n>         bob: Robert Bobbyton <bob@example.com>\n>         ...\n>     EOF\n\nA here-doc does not flow nicely in an indented block.  Each line in\nthe here-doc will also contain any indentation which may appear to the\nreader to be part of the test case.  Alternatively, the here-doc could\nbe indented differently than the surrounding test case (all the way to\nthe left column), but that also has a negative impact for readability.\nFinally, the EOF marker can not be indented.\n\nWith echo \"string\", exactly \"string\" is output to the line.  The\noperation is obvious to the reader.  The test case can use sane\nindentation, and the resulting output will be exactly what what it\nwould appear to be in the test case.\n\nEspecially for something like a test case where there should be\nabsolutely no confusion as to exactly what is the input to the test,\nclarity matters.  Any operation where the result is not immediately\nobvious to the reader, does not belong here.  Therefore, I will keep\nthe lines in the test case as echo \"string\".\n\n>\n> > +       git config --replace-all sendemail.aliasesfile \\\n> > +               \"$(pwd)/.tmp-email-aliases\" &&\n> > +       git config sendemail.aliasfiletype simple &&\n> > +       git send-email \\\n> > +               --from=\"Example <nobody@example.com>\" \\\n> > +               --to=alice --to=bcgrp \\\n> > +               --smtp-server=\"$(pwd)/fake.sendmail\" \\\n> > +               outdir/0001-*.patch \\\n> > +               2>errors >out &&\n> > +       grep \"^!awol@example\\.com!$\" commandline1 &&\n> > +       grep \"^!bob@example\\.com!$\" commandline1 &&\n> > +       grep \"^!chloe@example\\.com!$\" commandline1 &&\n> > +       grep \"^!o@example\\.com!$\" commandline1\n> > +'\n> >\n> >  do_xmailer_test () {\n> >         expected=$1 params=$2 &&\n> > --\n> > 2.3.4\n"},{"id":"261879","messageId":"CAPig+cSDAagVNhdobtTDGrdzLNSxKpOtUhEEDq+NLQZBOoWJxg@mail.gmail.com","threadId":"39402","inReplyTo":"CAJ80savXAOMAbdDC_F77esD1Fdi=BP6GK4biFOLJTtqqehjEOw@mail.gmail.com","subject":"Re: [PATCH v2] send-email: Add simple email aliases format","fromName":"Eric Sunshine","fromEmail":"sunshine@sunshineco.com","sentAt":"2015-05-22T03:59:38Z","receivedAt":"2015-05-22T03:59:38Z","isPatch":true,"sender":{"key":"sunshine@sunshineco.com","avatar":"https://avatars.githubusercontent.com/u/163641?v=4"},"body":"On Thu, May 21, 2015 at 11:19 PM, Allen Hubbe <allenbh@gmail.com> wrote:\n> On May 21, 2015 9:05 PM, \"Eric Sunshine\" <sunshine@sunshineco.com> wrote:\n>> On Thu, May 21, 2015 at 8:16 PM, Allen Hubbe <allenbh@gmail.com> wrote:\n>> > +test_expect_success $PREREQ 'sendemail.aliasfiletype=simple' '\n>> > +       clean_fake_sendmail && rm -fr outdir &&\n>> > +       git format-patch -1 -o outdir &&\n>> > +       {\n>> > +               echo \"alice: Alice W Land <awol@example.com>\"\n>> > +               echo \"bob: Robert Bobbyton <bob@example.com>\"\n>> > +               echo \"chloe: chloe@example.com\"\n>> > +               echo \"abgroup: alice, bob\"\n>> > +               echo \"bcgrp: bob, chloe, Other <o@example.com>\"\n>> > +       } >~/.tmp-email-aliases &&\n>>\n>> A here-doc would be easier to maintain and read:\n>>\n>>     cat >~/.tmp-email-aliases <<-\\EOF &&\n>>         alice: Alice W Land <awol@example.com>\n>>         bob: Robert Bobbyton <bob@example.com>\n>>         ...\n>>     EOF\n>\n> A here-doc does not flow nicely in an indented block.  Each line in\n> the here-doc will also contain any indentation which may appear to the\n> reader to be part of the test case.  Alternatively, the here-doc could\n> be indented differently than the surrounding test case (all the way to\n> the left column), but that also has a negative impact for readability.\n> Finally, the EOF marker can not be indented.\n\nThat's true if you use <<EOF here-doc, but not for <<-EOF, as I did in\nthe example. With <<-EOF, all leading tabs are stripped from the input\nlines, including from the EOF line, which is why it can be indented to\nthe same level as the other code in the test. The added '\\' in <<-\\EOF\nfrom my example indicates that you don't want/expect any interpolation\ninside the here-doc. The <<-\\EOF form is used extensively throughout\nthe Git test suite.\n\n> With echo \"string\", exactly \"string\" is output to the line.  The\n> operation is obvious to the reader.  The test case can use sane\n> indentation, and the resulting output will be exactly what what it\n> would appear to be in the test case.\n\nSame with <<-\\EOF; plus <<-\\EOF content is more readable since it's\nnot polluted with 'echo' noise.\n\n> Especially for something like a test case where there should be\n> absolutely no confusion as to exactly what is the input to the test,\n> clarity matters.  Any operation where the result is not immediately\n> obvious to the reader, does not belong here.  Therefore, I will keep\n> the lines in the test case as echo \"string\".\n"},{"id":"261896","messageId":"CAJ80sav9QEBnqbib5mG9O+XkWvgcH+C4aK+p4AdnE53_goNtCw@mail.gmail.com","threadId":"39402","inReplyTo":"CAPig+cSDAagVNhdobtTDGrdzLNSxKpOtUhEEDq+NLQZBOoWJxg@mail.gmail.com","subject":"Re: [PATCH v2] send-email: Add simple email aliases format","fromName":"Allen Hubbe","fromEmail":"allenbh@gmail.com","sentAt":"2015-05-22T12:15:02Z","receivedAt":"2015-05-22T12:15:02Z","isPatch":true,"sender":{"key":"allenbh@gmail.com","avatar":"https://avatars.githubusercontent.com/u/812915?v=4"},"body":"On Thu, May 21, 2015 at 11:59 PM, Eric Sunshine <sunshine@sunshineco.com> wrote:\n> On Thu, May 21, 2015 at 11:19 PM, Allen Hubbe <allenbh@gmail.com> wrote:\n>> On May 21, 2015 9:05 PM, \"Eric Sunshine\" <sunshine@sunshineco.com> wrote:\n>>> On Thu, May 21, 2015 at 8:16 PM, Allen Hubbe <allenbh@gmail.com> wrote:\n>>> > +test_expect_success $PREREQ 'sendemail.aliasfiletype=simple' '\n>>> > +       clean_fake_sendmail && rm -fr outdir &&\n>>> > +       git format-patch -1 -o outdir &&\n>>> > +       {\n>>> > +               echo \"alice: Alice W Land <awol@example.com>\"\n>>> > +               echo \"bob: Robert Bobbyton <bob@example.com>\"\n>>> > +               echo \"chloe: chloe@example.com\"\n>>> > +               echo \"abgroup: alice, bob\"\n>>> > +               echo \"bcgrp: bob, chloe, Other <o@example.com>\"\n>>> > +       } >~/.tmp-email-aliases &&\n>>>\n>>> A here-doc would be easier to maintain and read:\n>> A here-doc does not flow nicely in an indented block.  Each line in\n> That's true if you use <<EOF here-doc, but not for <<-EOF, as I did in\n> the example. With <<-EOF, all leading tabs are stripped from the input\n> lines, including from the EOF line, which is why it can be indented to\n> the same level as the other code in the test. The added '\\' in <<-\\EOF\n> from my example indicates that you don't want/expect any interpolation\n> inside the here-doc. The <<-\\EOF form is used extensively throughout\n> the Git test suite.\n\nAlright.\n"}]}