(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git send-email">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:PREREQ) op:Equal rhs:{(DQ (PERL))} spids:[17])]
      spids: [17]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"prepare reference tree">)} 
      {
        (SQ <"\n"> <"\techo \"1A quick brown fox jumps over the\" >file &&\n"> 
          <"\techo \"lazy dog\" >>file &&\n"> <"\tgit add file &&\n"> <"\tGIT_AUTHOR_NAME=\"A\" git commit -a -m \"Initial.\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Setup helper tool">)} 
      {
        (SQ <"\n"> <"\twrite_script fake.sendmail <<-\\EOF &&\n"> <"\tshift\n"> <"\toutput=1\n"> 
          <"\twhile test -f commandline$output\n"> <"\tdo\n"> <"\t\toutput=$(($output+1))\n"> <"\tdone\n"> <"\tfor a\n"> <"\tdo\n"> <"\t\techo \"!$a!\"\n"> 
          <"\tdone >commandline$output\n"> <"\tcat >\"msgtxt$output\"\n"> <"\tEOF\n"> <"\tgit add fake.sendmail &&\n"> 
          <"\tGIT_AUTHOR_NAME=\"A\" git commit -a -m \"Second.\"\n">
        )
      }
    )
    (FuncDef
      name: clean_fake_sendmail
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-f)} {(commandline) (Lit_Other "*")} {(msgtxt) (Lit_Other "*")})]
          spids: [73]
        )
      spids: [68 72]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Extract patches">)} 
      {
        (SQ <"\n"> 
          <
"\tpatches=$(git format-patch -s --cc=\"One <one@example.com>\" --cc=two@example.com -n HEAD^1)\n"
          >
        )
      }
    )
    (FuncDef
      name: test_no_confirm
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-f)} {(no_confirm_okay)})
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(echo)} {(n)})
                    (SimpleCommand
                      words: [
                        {(git)}
                        {(send-email)}
                        {(--from) (Lit_Other "=") (DQ ("Example <from@example.com>"))}
                        {(--to) (Lit_Other "=") (nobody) (Lit_Other "@") (example.com)}
                        {(--smtp-server) (Lit_Other "=") 
                          (DQ 
                            (CommandSubPart
                              command_list: (CommandList children:[(C {(pwd)})])
                              left_token: <Left_CommandSub "$(">
                              spids: [159 161]
                            ) (/fake.sendmail)
                          )
                        }
                        {($ VSub_At "$@")}
                        {($ VSub_Name "$patches")}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(stdout)} spids:[173])]
                      more_env: [(env_pair name:GIT_SEND_EMAIL_NOTTY val:{(1)} spids:[129])]
                    )
                  ]
                  negated: False
                )
                (AndOr
                  children: [
                    (C {(test_must_fail)} {(grep)} {(DQ ("Send this email"))} {(stdout)})
                    (SimpleCommand
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(no_confirm_okay)}
                          spids: [192]
                        )
                      ]
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [111]
        )
      spids: [106 110]
    )
    (FuncDef
      name: check_no_confirm
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(Pipeline children:[(C {(test)} {(-f)} {(no_confirm_okay)})] negated:True)]
                  action: [
                    (C {(say)} 
                      {(SQ <"confirm test failed; skipping remaining tests to prevent hanging">)}
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:PREREQ)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$PREREQ") (",CHECK_NO_CONFIRM"))}
                          spids: [230]
                        )
                      ]
                      spids: [230]
                    )
                  ]
                  spids: [-1 220]
                )
              ]
              spids: [-1 237]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [206]
        )
      spids: [201 205]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"No confirm with --suppress-cc">)} 
      {(SQ <"\n"> <"\ttest_no_confirm --suppress-cc=sob &&\n"> <"\tcheck_no_confirm\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"No confirm with --confirm=never">)} 
      {(SQ <"\n"> <"\ttest_no_confirm --confirm=never &&\n"> <"\tcheck_no_confirm\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"No confirm with sendemail.confirm=never">)} 
      {
        (SQ <"\n"> <"\tgit config sendemail.confirm never &&\n"> 
          <"\ttest_no_confirm --compose --subject=foo &&\n"> <"\tcheck_no_confirm\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Send patches">)} 
      {
        (SQ <"\n"> 
          <
"\tgit send-email --suppress-cc=sob --from=\"Example <nobody@example.com>\" --to=nobody@example.com --smtp-server=\"$(pwd)/fake.sendmail\" $patches 2>errors\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> <"\t!nobody@example.com!\n"> 
          <"\t!author@example.com!\n"> <"\t!one@example.com!\n"> <"\t!two@example.com!\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Verify commandline">)} 
      {(SQ <"\n"> <"\ttest_cmp expected commandline1\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Send patches with --envelope-sender">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <
"\tgit send-email --envelope-sender=\"Patch Contributor <patch@example.com>\" --suppress-cc=sob --from=\"Example <nobody@example.com>\" --to=nobody@example.com --smtp-server=\"$(pwd)/fake.sendmail\" $patches 2>errors\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> <"\t!patch@example.com!\n"> <"\t!-i!\n"> 
          <"\t!nobody@example.com!\n"> <"\t!author@example.com!\n"> <"\t!one@example.com!\n"> <"\t!two@example.com!\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Verify commandline">)} 
      {(SQ <"\n"> <"\ttest_cmp expected commandline1\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"Send patches with --envelope-sender=auto">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <
"\tgit send-email --envelope-sender=auto --suppress-cc=sob --from=\"Example <nobody@example.com>\" --to=nobody@example.com --smtp-server=\"$(pwd)/fake.sendmail\" $patches 2>errors\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> <"\t!nobody@example.com!\n"> <"\t!-i!\n"> 
          <"\t!nobody@example.com!\n"> <"\t!author@example.com!\n"> <"\t!one@example.com!\n"> <"\t!two@example.com!\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Verify commandline">)} 
      {(SQ <"\n"> <"\ttest_cmp expected commandline1\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect for cc trailer">)} 
      {
        (DQ ("\n") ("cat >expected-cc <<") (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) ("OF\n") 
          ("!recipient@example.com!\n") ("!author@example.com!\n") ("!one@example.com!\n") ("!two@example.com!\n") ("!three@example.com!\n") 
          ("!four@example.com!\n") ("!five@example.com!\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"cc trailer with various syntax">)} 
      {
        (SQ <"\n"> <"\ttest_commit cc-trailer &&\n"> 
          <"\ttest_when_finished \"git reset --hard HEAD^\" &&\n"> <"\tgit commit --amend -F - <<-EOF &&\n"> <"\tTest Cc: trailers.\n"> <"\n"> <"\tCc: one@example.com\n"> 
          <"\tCc: <two@example.com> # this is part of the name\n"> <"\tCc: <three@example.com>, <four@example.com> # not.five@example.com\n"> 
          <"\tCc: \"Some # Body\" <five@example.com> [part.of.name.too]\n"> <"\tEOF\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email -1 --to=recipient@example.com \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" &&\n"> <"\ttest_cmp expected-cc commandline1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-show-all-headers <<") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<cc@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") 
          ("RCPT TO:<two@example.com>\n") ("RCPT TO:<bcc@example.com>\n") ("From: Example <from@example.com>\n") ("To: to@example.com\n") 
          ("Cc: cc@example.com,\n") ("\tA <author@example.com>,\n") ("\tOne <one@example.com>,\n") ("\ttwo@example.com\n") 
          ("Subject: [PATCH 1/1] Second.\n") ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") ("X-Mailer: X-MAILER-STRING\n") 
          ("In-Reply-To: <unique-message-id@example.com>\n") ("References: <unique-message-id@example.com>\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (FuncDef
      name: test_suppress_self
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(test_commit)} {($ VSub_Number "$3")})
                (AndOr
                  children: [
                    (C {(test_when_finished)} {(DQ ("git reset --hard HEAD^"))})
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [{(write_script)} {(cccmd-sed)}]
                          redirects: [
                            (HereDoc
                              op_id: Redir_DLessDash
                              fd: -1
                              body: 
                                {
                                  (DQ ("sed -n -e s/^cccmd--//p ") (Right_DoubleQuote "\"") 
                                    (EscapedLiteralPart
                                      token: <Lit_EscapedChar "\\$">
                                    ) (1) (Right_DoubleQuote "\"") ("\n")
                                  )
                                }
                              do_expansion: True
                              here_end: EOF
                              was_filled: True
                              spids: [571]
                            )
                          ]
                        )
                        (AndOr
                          children: [
                            (C {(git)} {(commit)} {(--amend)} 
                              {(--author) (Lit_Other "=") 
                                (DQ ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") (">"))
                              } {(-F)} {(-)}
                            )
                            (AndOr
                              children: [
                                (C {(clean_fake_sendmail)})
                                (AndOr
                                  children: [
                                    (SimpleCommand
                                      words: [{(git)} {(format-patch)} {(--stdout)} {(-1)}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: -1
                                          arg_word: 
                                            {(DQ (suppress-self-) ($ VSub_Number "$3") (.patch))}
                                          spids: [619]
                                        )
                                      ]
                                    )
                                    (AndOr
                                      children: [
                                        (C {(git)} {(send-email)} 
                                          {(--from) (Lit_Other "=") 
                                            (DQ ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") (">"))
                                          } {(--to) (Lit_Other "=") (nobody) (Lit_Other "@") (example.com)} 
                                          {(--cc-cmd) (Lit_Other "=") (./cccmd-sed)} {(--suppress-cc) (Lit_Other "=") (self)} 
                                          {(--smtp-server) (Lit_Other "=") 
                                            (DQ 
                                              (CommandSubPart
                                                command_list: (CommandList children:[(C {(pwd)})])
                                                left_token: <Left_CommandSub "$(">
                                                spids: [668 670]
                                              ) (/fake.sendmail)
                                            )
                                          } {(suppress-self-) ($ VSub_Number "$3") (.patch)}
                                        )
                                        (AndOr
                                          children: [
                                            (C {(mv)} {(msgtxt1)} {(msgtxt1-) ($ VSub_Number "$3")})
                                            (AndOr
                                              children: [
                                                (SimpleCommand
                                                  words: [
                                                    {(sed)}
                                                    {(-e)}
                                                    {(SQ <"/^$/q">)}
                                                    {(msgtxt1-) ($ VSub_Number "$3")}
                                                  ]
                                                  redirects: [
                                                    (Redir
                                                      op_id: Redir_Great
                                                      fd: -1
                                                      arg_word: {(DQ (msghdr1-) ($ VSub_Number "$3"))}
                                                      spids: [705]
                                                    )
                                                  ]
                                                )
                                                (AndOr
                                                  children: [
                                                    (SimpleCommand
                                                      redirects: [
                                                        (Redir
                                                          op_id: Redir_Great
                                                          fd: -1
                                                          arg_word: 
                                                            {
                                                              (DQ (expected-no-cc-) 
                                                                ($ VSub_Number "$3")
                                                              )
                                                            }
                                                          spids: [714]
                                                        )
                                                      ]
                                                    )
                                                    (Subshell
                                                      child: 
                                                        (CommandList
                                                          children: [
                                                            (Sentence
                                                              child: 
                                                                (SimpleCommand
                                                                  words: [
                                                                    {(grep)}
                                                                    {(SQ <"^Cc:">)}
                                                                    {(msghdr1-) ($ VSub_Number "$3")}
                                                                  ]
                                                                  redirects: [
                                                                    (Redir
                                                                      op_id: Redir_Great
                                                                      fd: -1
                                                                      arg_word: 
                                                                        {
                                                                          (DQ (actual-no-cc-) 
                                                                            ($ VSub_Number "$3")
                                                                          )
                                                                        }
                                                                      spids: [734]
                                                                    )
                                                                  ]
                                                                )
                                                              terminator: <Op_Semi ";">
                                                            )
                                                            (C {(test_cmp)} 
                                                              {(expected-no-cc-) 
                                                                ($ VSub_Number "$3")
                                                              } {(actual-no-cc-) ($ VSub_Number "$3")}
                                                            )
                                                          ]
                                                        )
                                                      spids: [724 749]
                                                    )
                                                  ]
                                                  op_id: Op_DAmp
                                                )
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [547]
        )
      spids: [542 546]
    )
    (FuncDef
      name: test_suppress_self_unquoted
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [
                {(test_suppress_self)}
                {(DQ ($ VSub_Number "$1"))}
                {(DQ ($ VSub_Number "$2"))}
                {(DQ (unquoted-) ($ VSub_Number "$3"))}
              ]
              redirects: [
                (HereDoc
                  op_id: Redir_DLessDash
                  fd: -1
                  body: 
                    {
                      (DQ ("test suppress-cc.self unquoted-") ($ VSub_Number "$3") (" with name ") 
                        ($ VSub_Number "$1") (" email ") ($ VSub_Number "$2") ("\n") ("\n") (unquoted-) ($ VSub_Number "$3") ("\n") ("\n") (cccmd--) 
                        ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") (">\n") ("\n") ("Cc: ") ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") (">\n") 
                        ("Signed-off-by: ") ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") (">\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [777]
                )
              ]
            )
          ]
          spids: [759]
        )
      spids: [754 758]
    )
    (FuncDef
      name: test_suppress_self_quoted
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [
                {(test_suppress_self)}
                {(DQ ($ VSub_Number "$1"))}
                {(DQ ($ VSub_Number "$2"))}
                {(DQ (quoted-) ($ VSub_Number "$3"))}
              ]
              redirects: [
                (HereDoc
                  op_id: Redir_DLessDash
                  fd: -1
                  body: 
                    {
                      (DQ ("test suppress-cc.self quoted-") ($ VSub_Number "$3") (" with name ") 
                        ($ VSub_Number "$1") (" email ") ($ VSub_Number "$2") ("\n") ("\n") (quoted-) ($ VSub_Number "$3") ("\n") ("\n") (cccmd--) 
                        (Right_DoubleQuote "\"") ($ VSub_Number "$1") (Right_DoubleQuote "\"") (" <") ($ VSub_Number "$2") (">\n") ("\n") ("Cc: ") 
                        ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") (">\n") ("Cc: ") (Right_DoubleQuote "\"") ($ VSub_Number "$1") 
                        (Right_DoubleQuote "\"") (" <") ($ VSub_Number "$2") (">\n") ("Signed-off-by: ") ($ VSub_Number "$1") (" <") ($ VSub_Number "$2") 
                        (">\n") ("Signed-off-by: ") (Right_DoubleQuote "\"") ($ VSub_Number "$1") (Right_DoubleQuote "\"") (" <") 
                        ($ VSub_Number "$2") (">\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [834]
                )
              ]
            )
          ]
          spids: [816]
        )
      spids: [811 815]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"self name is suppressed">)} 
      {
        (DQ ("\n") ("\ttest_suppress_self_unquoted 'A U Thor' 'author@example.com' ") 
          ("\t\t'self_name_suppressed'\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"self name with dot is suppressed">)} 
      {
        (DQ ("\n") ("\ttest_suppress_self_quoted 'A U. Thor' 'author@example.com' ") 
          ("\t\t'self_name_dot_suppressed'\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"non-ascii self name is suppressed">)} 
      {
        (DQ ("\n") 
          (
"\ttest_suppress_self_quoted 'F\u00fc\u00f1n\u00fd N\u00e2m\u00e9' 'odd_?=mail@example.com' "
          ) ("\t\t'non_ascii_self_suppressed'\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"long non-ascii self name is suppressed">)} 
      {
        (DQ ("\n") 
          (
"\ttest_suppress_self_quoted '\u0191\u00fc\u00f1n\u00ed\u0119\u0159 \u20ac. N\u00e2\u1e41\u00e9' 'odd_?=mail@example.com' "
          ) ("\t\t'long_non_ascii_self_suppressed'\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sanitized self name is suppressed">)} 
      {
        (DQ ("\n") ("\ttest_suppress_self_unquoted '") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ("A U. Thor") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ("' 'author@example.com' ") 
          ("\t\t'self_name_sanitized_suppressed'\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Show all headers">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--suppress-cc=sob \\\n"> 
          <"\t\t--from=\"Example <from@example.com>\" \\\n"> <"\t\t--to=to@example.com \\\n"> <"\t\t--cc=cc@example.com \\\n"> <"\t\t--bcc=bcc@example.com \\\n"> 
          <"\t\t--in-reply-to=\"<unique-message-id@example.com>\" \\\n"> <"\t\t--smtp-server relay.example.com \\\n"> <"\t\t$patches |\n"> 
          <"\tsed\t-e \"s/^\\(Date:\\).*/\\1 DATE-STRING/\" \\\n"> <"\t\t-e \"s/^\\(Message-Id:\\).*/\\1 MESSAGE-ID-STRING/\" \\\n"> 
          <"\t\t-e \"s/^\\(X-Mailer:\\).*/\\1 X-MAILER-STRING/\" \\\n"> <"\t\t>actual-show-all-headers &&\n"> 
          <"\ttest_cmp expected-show-all-headers actual-show-all-headers\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Prompting works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\t(echo \"to@example.com\"\n"> <"\t echo \"\"\n"> 
          <"\t) | GIT_SEND_EMAIL_NOTTY=1 git send-email \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches \\\n"> <"\t\t2>errors &&\n"> 
          <"\t\tgrep \"^From: A U Thor <author@example.com>\\$\" msgtxt1 &&\n"> <"\t\tgrep \"^To: to@example.com\\$\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ") (Lit_Comma ",") (AUTOIDENT)} 
      {(SQ <"implicit ident is allowed">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\t(sane_unset GIT_AUTHOR_NAME &&\n"> 
          <"\tsane_unset GIT_AUTHOR_EMAIL &&\n"> <"\tsane_unset GIT_COMMITTER_NAME &&\n"> <"\tsane_unset GIT_COMMITTER_EMAIL &&\n"> 
          <"\tGIT_SEND_EMAIL_NOTTY=1 git send-email \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t--to=to@example.com \\\n"> 
          <"\t\t$patches </dev/null 2>errors\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ") (Lit_Comma ",") (KW_Bang "!") (AUTOIDENT)} 
      {(SQ <"broken implicit ident aborts send-email">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\t(sane_unset GIT_AUTHOR_NAME &&\n"> 
          <"\tsane_unset GIT_AUTHOR_EMAIL &&\n"> <"\tsane_unset GIT_COMMITTER_NAME &&\n"> <"\tsane_unset GIT_COMMITTER_EMAIL &&\n"> 
          <"\tGIT_SEND_EMAIL_NOTTY=1 && export GIT_SEND_EMAIL_NOTTY &&\n"> <"\ttest_must_fail git send-email \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\t--to=to@example.com \\\n"> <"\t\t$patches </dev/null 2>errors &&\n"> <"\ttest_i18ngrep \"tell me who you are\" errors\n"> 
          <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup tocmd and cccmd scripts">)} 
      {
        (SQ <"\n"> <"\twrite_script tocmd-sed <<-\\EOF &&\n"> 
          <"\tsed -n -e \"s/^tocmd--//p\" \"$1\"\n"> <"\tEOF\n"> <"\twrite_script cccmd-sed <<-\\EOF\n"> <"\tsed -n -e \"s/^cccmd--//p\" \"$1\"\n"> 
          <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"tocmd works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tcp $patches tocmd.patch &&\n"> 
          <"\techo tocmd--tocmd@example.com >>tocmd.patch &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to-cmd=./tocmd-sed \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\ttocmd.patch \\\n"> <"\t\t&&\n"> 
          <"\tgrep \"^To: tocmd@example.com\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"cccmd works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tcp $patches cccmd.patch &&\n"> 
          <"\techo \"cccmd--  cccmd@example.com\" >>cccmd.patch &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--cc-cmd=./cccmd-sed \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\tcccmd.patch \\\n"> <"\t\t&&\n"> <"\tgrep \"^\tcccmd@example.com\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"reject long lines">)} 
      {
        (SQ <"\n"> <"\tz8=zzzzzzzz &&\n"> <"\tz64=$z8$z8$z8$z8$z8$z8$z8$z8 &&\n"> 
          <"\tz512=$z64$z64$z64$z64$z64$z64$z64$z64 &&\n"> <"\tclean_fake_sendmail &&\n"> <"\tcp $patches longline.patch &&\n"> 
          <"\techo $z512$z512 >>longline.patch &&\n"> <"\ttest_must_fail git send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches longline.patch \\\n"> 
          <"\t\t2>errors &&\n"> <"\tgrep longline.patch errors\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"no patch was sent">)} 
      {(SQ <"\n"> <"\t! test -e commandline1\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Author From: in message body">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\t$patches &&\n"> <"\tsed \"1,/^\\$/d\" <msgtxt1 >msgbody1 &&\n"> <"\tgrep \"From: A <author@example.com>\" msgbody1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Author From: not in message body">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--from=\"A <author@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\t$patches &&\n"> <"\tsed \"1,/^\\$/d\" <msgtxt1 >msgbody1 &&\n"> 
          <"\t! grep \"From: A <author@example.com>\" msgbody1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"allow long lines with --no-validate">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t--no-validate \\\n"> 
          <"\t\t$patches longline.patch \\\n"> <"\t\t2>errors\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Invalid In-Reply-To">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--in-reply-to=\" \" \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches \\\n"> <"\t\t2>errors &&\n"> <"\t! grep \"^In-Reply-To: < *>\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"Valid In-Reply-To when prompting">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\t(echo \"From Example <from@example.com>\"\n"> 
          <"\t echo \"To Example <to@example.com>\"\n"> <"\t echo \"\"\n"> <"\t) | GIT_SEND_EMAIL_NOTTY=1 git send-email \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches 2>errors &&\n"> <"\t! grep \"^In-Reply-To: < *>\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"In-Reply-To without --chain-reply-to">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"<unique-message-id@example.com>\" >expect &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--no-chain-reply-to \\\n"> <"\t\t--in-reply-to=\"$(cat expect)\" \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches $patches $patches \\\n"> <"\t\t2>errors &&\n"> 
          <"\t# The first message is a reply to --in-reply-to\n"> <"\tsed -n -e \"s/^In-Reply-To: *\\(.*\\)/\\1/p\" msgtxt1 >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\t# Second and subsequent messages are replies to the first one\n"> 
          <"\tsed -n -e \"s/^Message-Id: *\\(.*\\)/\\1/p\" msgtxt1 >expect &&\n"> <"\tsed -n -e \"s/^In-Reply-To: *\\(.*\\)/\\1/p\" msgtxt2 >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tsed -n -e \"s/^In-Reply-To: *\\(.*\\)/\\1/p\" msgtxt3 >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"In-Reply-To with --chain-reply-to">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"<unique-message-id@example.com>\" >expect &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--chain-reply-to \\\n"> <"\t\t--in-reply-to=\"$(cat expect)\" \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches $patches $patches \\\n"> <"\t\t2>errors &&\n"> 
          <"\tsed -n -e \"s/^In-Reply-To: *\\(.*\\)/\\1/p\" msgtxt1 >actual &&\n"> <"\ttest_cmp expect actual &&\n"> 
          <"\tsed -n -e \"s/^Message-Id: *\\(.*\\)/\\1/p\" msgtxt1 >expect &&\n"> <"\tsed -n -e \"s/^In-Reply-To: *\\(.*\\)/\\1/p\" msgtxt2 >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tsed -n -e \"s/^Message-Id: *\\(.*\\)/\\1/p\" msgtxt2 >expect &&\n"> 
          <"\tsed -n -e \"s/^In-Reply-To: *\\(.*\\)/\\1/p\" msgtxt3 >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup fake editor">)} 
      {
        (SQ <"\n"> <"\twrite_script fake-editor <<-\\EOF\n"> <"\techo fake edit >>\"$1\"\n"> <"\tEOF\n">)
      }
    )
    (C {(test_set_editor)} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [1370 1372]
          ) (/fake-editor)
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--compose works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t--compose --subject foo \\\n"> <"\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t--to=nobody@example.com \\\n"> 
          <"\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t$patches \\\n"> <"\t2>errors\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"first message is compose text">)} 
      {(SQ <"\n"> <"\tgrep \"^fake edit\" msgtxt1\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"second message is patch">)} 
      {(SQ <"\n"> <"\tgrep \"Subject:.*Second\" msgtxt2\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-sob <<") (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) 
          ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<cc@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") 
          ("RCPT TO:<two@example.com>\n") ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: cc@example.com,\n") 
          ("\tA <author@example.com>,\n") ("\tOne <one@example.com>,\n") ("\ttwo@example.com\n") ("Subject: [PATCH 1/1] Second.\n") 
          ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (FuncDef
      name: replace_variable_fields
      body: 
        (BraceGroup
          children: [
            (C {(sed)} {(-e)} 
              {
                (DQ ("s/^") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ("Date:") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (".*/") (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) (" DATE-STRING/")
                )
              } {(-e)} 
              {
                (DQ ("s/^") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ("Message-Id:") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (".*/") (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) (" MESSAGE-ID-STRING/")
                )
              } {(-e)} 
              {
                (DQ ("s/^") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ("X-Mailer:") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (".*/") (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) (" X-MAILER-STRING/")
                )
              }
            )
          ]
          spids: [1472]
        )
      spids: [1467 1471]
    )
    (FuncDef
      name: test_suppression
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(git)} {(send-email)} {(--dry-run)} 
                      {(--suppress-cc) (Lit_Other "=") ($ VSub_Number "$1")} 
                      {
                        (BracedVarSub
                          token: <VSub_Number 2>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_Plus
                              arg_word: {(DQ ("--suppress-cc=") ($ VSub_Number "$2"))}
                            )
                          spids: [1542 1549]
                        )
                      } {(--from) (Lit_Other "=") (DQ ("Example <from@example.com>"))} 
                      {(--to) (Lit_Other "=") (to) (Lit_Other "@") (example.com)} {(--smtp-server)} {(relay.example.com)} {($ VSub_Name "$patches")}
                    )
                    (SimpleCommand
                      words: [{(replace_variable_fields)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: 
                            {(actual-suppress-) ($ VSub_Number "$1") 
                              (BracedVarSub
                                token: <VSub_Number 2>
                                suffix_op: 
                                  (StringUnary
                                    op_id: VTest_Plus
                                    arg_word: {(DQ (-) ($ VSub_Number "$2"))}
                                  )
                                spids: [1586 1593]
                              )
                            }
                          spids: [1583]
                        )
                      ]
                    )
                  ]
                  negated: False
                )
                (C {(test_cmp)} 
                  {(expected-suppress-) ($ VSub_Number "$1") 
                    (BracedVarSub
                      token: <VSub_Number 2>
                      suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(DQ (-) ($ VSub_Number "$2"))})
                      spids: [1602 1609]
                    )
                  } 
                  {(actual-suppress-) ($ VSub_Number "$1") 
                    (BracedVarSub
                      token: <VSub_Number 2>
                      suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(DQ (-) ($ VSub_Number "$2"))})
                      spids: [1613 1620]
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [1525]
        )
      spids: [1520 1524]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.cc set">)} 
      {(SQ <"\n"> <"\tgit config sendemail.cc cc@example.com &&\n"> <"\ttest_suppression sob\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-sob <<") (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) 
          ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") ("RCPT TO:<two@example.com>\n") 
          ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") ("\tOne <one@example.com>,\n") 
          ("\ttwo@example.com\n") ("Subject: [PATCH 1/1] Second.\n") ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") 
          ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.cc unset">)} 
      {(SQ <"\n"> <"\tgit config --unset sendemail.cc &&\n"> <"\ttest_suppression sob\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-cccmd <<") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) 
          (
"(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") ("RCPT TO:<two@example.com>\n") 
          ("RCPT TO:<committer@example.com>\n") ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") 
          ("\tOne <one@example.com>,\n") ("\ttwo@example.com,\n") ("\tC O Mitter <committer@example.com>\n") ("Subject: [PATCH 1/1] Second.\n") 
          ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <sendemail.cccmd>)} 
      {
        (SQ <"\n"> <"\twrite_script cccmd <<-\\EOF &&\n"> <"\techo cc-cmd@example.com\n"> <"\tEOF\n"> 
          <"\tgit config sendemail.cccmd ./cccmd &&\n"> <"\ttest_suppression cccmd\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"cat >expected-suppress-all <<\\EOF\n"> <"0001-Second.patch\n"> 
          <"Dry-OK. Log says:\n"> <"Server: relay.example.com\n"> <"MAIL FROM:<from@example.com>\n"> <"RCPT TO:<to@example.com>\n"> 
          <"From: Example <from@example.com>\n"> <"To: to@example.com\n"> <"Subject: [PATCH 1/1] Second.\n"> <"Date: DATE-STRING\n"> 
          <"Message-Id: MESSAGE-ID-STRING\n"> <"X-Mailer: X-MAILER-STRING\n"> <"\n"> <"Result: OK\n"> <"EOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--suppress-cc=all">)} 
      {(SQ <"\n"> <"\ttest_suppression all\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-body <<") (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) 
          ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) ("(cc-cmd) Adding cc: cc-cmd@example.com from: './cccmd'\n") ("Dry-OK. Log says:\n") 
          ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") 
          ("RCPT TO:<one@example.com>\n") ("RCPT TO:<two@example.com>\n") ("RCPT TO:<cc-cmd@example.com>\n") 
          ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") ("\tOne <one@example.com>,\n") 
          ("\ttwo@example.com,\n") ("\tcc-cmd@example.com\n") ("Subject: [PATCH 1/1] Second.\n") ("Date: DATE-STRING\n") 
          ("Message-Id: MESSAGE-ID-STRING\n") ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--suppress-cc=body">)} 
      {(SQ <"\n"> <"\ttest_suppression body\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-body-cccmd <<") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") ("RCPT TO:<two@example.com>\n") 
          ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") ("\tOne <one@example.com>,\n") 
          ("\ttwo@example.com\n") ("Subject: [PATCH 1/1] Second.\n") ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") 
          ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--suppress-cc=body --suppress-cc=cccmd">)} {(SQ <"\n"> <"\ttest_suppression body cccmd\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-sob <<") (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) 
          ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") ("RCPT TO:<two@example.com>\n") 
          ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") ("\tOne <one@example.com>,\n") 
          ("\ttwo@example.com\n") ("Subject: [PATCH 1/1] Second.\n") ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") 
          ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--suppress-cc=sob">)} 
      {
        (SQ <"\n"> <"\ttest_might_fail git config --unset sendemail.cccmd &&\n"> 
          <"\ttest_suppression sob\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-bodycc <<") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") ("(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'\n") 
          (
"(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'\n"
          ) 
          (
"(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<one@example.com>\n") ("RCPT TO:<two@example.com>\n") 
          ("RCPT TO:<committer@example.com>\n") ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") 
          ("\tOne <one@example.com>,\n") ("\ttwo@example.com,\n") ("\tC O Mitter <committer@example.com>\n") ("Subject: [PATCH 1/1] Second.\n") 
          ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") ("X-Mailer: X-MAILER-STRING\n") ("\n") ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--suppress-cc=bodycc">)} 
      {(SQ <"\n"> <"\ttest_suppression bodycc\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("cat >expected-suppress-cc <<") (EscapedLiteralPart token:<Lit_EscapedChar "\\E">) 
          ("OF\n") ("0001-Second.patch\n") 
          ("(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'\n") 
          (
"(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'\n"
          ) ("Dry-OK. Log says:\n") ("Server: relay.example.com\n") ("MAIL FROM:<from@example.com>\n") 
          ("RCPT TO:<to@example.com>\n") ("RCPT TO:<author@example.com>\n") ("RCPT TO:<committer@example.com>\n") 
          ("From: Example <from@example.com>\n") ("To: to@example.com\n") ("Cc: A <author@example.com>,\n") ("\tC O Mitter <committer@example.com>\n") 
          ("Subject: [PATCH 1/1] Second.\n") ("Date: DATE-STRING\n") ("Message-Id: MESSAGE-ID-STRING\n") ("X-Mailer: X-MAILER-STRING\n") ("\n") 
          ("Result: OK\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--suppress-cc=cc">)} 
      {(SQ <"\n"> <"\ttest_suppression cc\n">)}
    )
    (FuncDef
      name: test_confirm
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(echo)} {(y)})
                    (SimpleCommand
                      words: [
                        {(git)}
                        {(send-email)}
                        {(--from) (Lit_Other "=") (DQ ("Example <nobody@example.com>"))}
                        {(--to) (Lit_Other "=") (nobody) (Lit_Other "@") (example.com)}
                        {(--smtp-server) (Lit_Other "=") 
                          (DQ 
                            (CommandSubPart
                              command_list: (CommandList children:[(C {(pwd)})])
                              left_token: <Left_CommandSub "$(">
                              spids: [2111 2113]
                            ) (/fake.sendmail)
                          )
                        }
                        {($ VSub_At "$@")}
                        {($ VSub_Name "$patches")}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(stdout)} spids:[2123])]
                      more_env: [(env_pair name:GIT_SEND_EMAIL_NOTTY val:{(1)} spids:[2081])]
                    )
                  ]
                  negated: False
                )
                (C {(grep)} {(DQ ("Send this email"))} {(stdout)})
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [2070]
        )
      spids: [2065 2069]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--confirm=always">)} 
      {(SQ <"\n"> <"\ttest_confirm --confirm=always --suppress-cc=all\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--confirm=auto">)} 
      {(SQ <"\n"> <"\ttest_confirm --confirm=auto\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--confirm=cc">)} 
      {(SQ <"\n"> <"\ttest_confirm --confirm=cc\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--confirm=compose">)} 
      {(SQ <"\n"> <"\ttest_confirm --confirm=compose --compose\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"confirm by default (due to cc)">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished git config sendemail.confirm never &&\n"> 
          <"\tgit config --unset sendemail.confirm &&\n"> <"\ttest_confirm\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"confirm by default (due to --compose)">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished git config sendemail.confirm never &&\n"> 
          <"\tgit config --unset sendemail.confirm &&\n"> <"\ttest_confirm --suppress-cc=all --compose\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"confirm detects EOF (inform assumes y)">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished git config sendemail.confirm never &&\n"> 
          <"\tgit config --unset sendemail.confirm &&\n"> <"\trm -fr outdir &&\n"> <"\tgit format-patch -2 -o outdir &&\n"> <"\tGIT_SEND_EMAIL_NOTTY=1 \\\n"> 
          <"\t\tgit send-email \\\n"> <"\t\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t\t--to=nobody@example.com \\\n"> 
          <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\toutdir/*.patch </dev/null\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"confirm detects EOF (auto causes failure)">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished git config sendemail.confirm never &&\n"> 
          <"\tgit config sendemail.confirm auto &&\n"> <"\tGIT_SEND_EMAIL_NOTTY=1 &&\n"> <"\texport GIT_SEND_EMAIL_NOTTY &&\n"> 
          <"\t\ttest_must_fail git send-email \\\n"> <"\t\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t\t--to=nobody@example.com \\\n"> 
          <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\t$patches </dev/null\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"confirm does not loop forever">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished git config sendemail.confirm never &&\n"> 
          <"\tgit config sendemail.confirm auto &&\n"> <"\tGIT_SEND_EMAIL_NOTTY=1 &&\n"> <"\texport GIT_SEND_EMAIL_NOTTY &&\n"> 
          <"\t\tyes \"bogus\" | test_must_fail git send-email \\\n"> <"\t\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t\t--to=nobody@example.com \\\n"> 
          <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\t$patches\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"utf8 Cc is rfc2047 encoded">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\trm -fr outdir &&\n"> 
          <
"\tgit format-patch -1 -o outdir --cc=\"\u00e0\u00e9\u00ec\u00f6\u00fa <utf8@example.com>\" &&\n"
          > <"\tgit send-email \\\n"> <"\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t--to=nobody@example.com \\\n"> <"\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\toutdir/*.patch &&\n"> 
          <"\tgrep \"^\t\" msgtxt1 |\n"> <"\tgrep \"=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--compose adds MIME for utf8 body">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\twrite_script fake-editor-utf8 <<-\\EOF &&\n"> 
          <"\techo \"utf8 body: \u00e0\u00e9\u00ec\u00f6\u00fa\" >>\"$1\"\n"> <"\tEOF\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor-utf8\\\"\" \\\n"> <"\tgit send-email \\\n"> 
          <"\t\t--compose --subject foo \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches &&\n"> <"\tgrep \"^utf8 body\" msgtxt1 &&\n"> 
          <"\tgrep \"^Content-Type: text/plain; charset=UTF-8\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--compose respects user mime type">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\twrite_script fake-editor-utf8-mime <<-\\EOF &&\n"> <"\tcat >\"$1\" <<-\\EOM\n"> <"\tMIME-Version: 1.0\n"> 
          <"\tContent-Type: text/plain; charset=iso-8859-1\n"> <"\tContent-Transfer-Encoding: 8bit\n"> <"\tSubject: foo\n"> <"\n"> 
          <"\tutf8 body: \u00e0\u00e9\u00ec\u00f6\u00fa\n"> <"\tEOM\n"> <"\tEOF\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor-utf8-mime\\\"\" \\\n"> 
          <"\tgit send-email \\\n"> <"\t\t--compose --subject foo \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches &&\n"> 
          <"\tgrep \"^utf8 body\" msgtxt1 &&\n"> <"\tgrep \"^Content-Type: text/plain; charset=iso-8859-1\" msgtxt1 &&\n"> 
          <"\t! grep \"^Content-Type: text/plain; charset=UTF-8\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--compose adds MIME for utf8 subject">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor\\\"\" \\\n"> 
          <"\tgit send-email \\\n"> <"\t\t--compose --subject utf8-s\u00fcbj\u00ebct \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\t$patches &&\n"> <"\tgrep \"^fake edit\" msgtxt1 &&\n"> 
          <"\tgrep \"^Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"utf8 author is correctly passed on">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\ttest_commit weird_author &&\n"> 
          <"\ttest_when_finished \"git reset --hard HEAD^\" &&\n"> 
          <
"\tgit commit --amend --author \"F\u00fc\u00f1n\u00fd N\u00e2m\u00e9 <odd_?=mail@example.com>\" &&\n"
          > <"\tgit format-patch --stdout -1 >funny_name.patch &&\n"> 
          <"\tgit send-email --from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\tfunny_name.patch &&\n"> <"\tgrep \"^From: F\u00fc\u00f1n\u00fd N\u00e2m\u00e9 <odd_?=mail@example.com>\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"utf8 sender is not duplicated">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\ttest_commit weird_sender &&\n"> 
          <"\ttest_when_finished \"git reset --hard HEAD^\" &&\n"> 
          <
"\tgit commit --amend --author \"F\u00fc\u00f1n\u00fd N\u00e2m\u00e9 <odd_?=mail@example.com>\" &&\n"
          > <"\tgit format-patch --stdout -1 >funny_name.patch &&\n"> 
          <
"\tgit send-email --from=\"F\u00fc\u00f1n\u00fd N\u00e2m\u00e9 <odd_?=mail@example.com>\" \\\n"
          > <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\tfunny_name.patch &&\n"> <"\tgrep \"^From: \" msgtxt1 >msgfrom &&\n"> <"\ttest_line_count = 1 msgfrom\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.composeencoding works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\tgit config sendemail.composeencoding iso-8859-1 &&\n"> <"\twrite_script fake-editor-utf8 <<-\\EOF &&\n"> 
          <"\techo \"utf8 body: \u00e0\u00e9\u00ec\u00f6\u00fa\" >>\"$1\"\n"> <"\tEOF\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor-utf8\\\"\" \\\n"> <"\tgit send-email \\\n"> 
          <"\t\t--compose --subject foo \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches &&\n"> <"\tgrep \"^utf8 body\" msgtxt1 &&\n"> 
          <"\tgrep \"^Content-Type: text/plain; charset=iso-8859-1\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--compose-encoding works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\twrite_script fake-editor-utf8 <<-\\EOF &&\n"> 
          <"\techo \"utf8 body: \u00e0\u00e9\u00ec\u00f6\u00fa\" >>\"$1\"\n"> <"\tEOF\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor-utf8\\\"\" \\\n"> <"\tgit send-email \\\n"> 
          <"\t\t--compose-encoding iso-8859-1 \\\n"> <"\t\t--compose --subject foo \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches &&\n"> 
          <"\tgrep \"^utf8 body\" msgtxt1 &&\n"> <"\tgrep \"^Content-Type: text/plain; charset=iso-8859-1\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--compose-encoding overrides sendemail.composeencoding">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\tgit config sendemail.composeencoding iso-8859-1 &&\n"> <"\twrite_script fake-editor-utf8 <<-\\EOF &&\n"> 
          <"\techo \"utf8 body: \u00e0\u00e9\u00ec\u00f6\u00fa\" >>\"$1\"\n"> <"\tEOF\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor-utf8\\\"\" \\\n"> <"\tgit send-email \\\n"> 
          <"\t\t--compose-encoding iso-8859-2 \\\n"> <"\t\t--compose --subject foo \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t$patches &&\n"> 
          <"\tgrep \"^utf8 body\" msgtxt1 &&\n"> <"\tgrep \"^Content-Type: text/plain; charset=iso-8859-2\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--compose-encoding adds correct MIME for subject">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor\\\"\" \\\n"> 
          <"\tgit send-email \\\n"> <"\t\t--compose-encoding iso-8859-2 \\\n"> <"\t\t--compose --subject utf8-s\u00fcbj\u00ebct \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\t$patches &&\n"> <"\tgrep \"^fake edit\" msgtxt1 &&\n"> 
          <"\tgrep \"^Subject: =?iso-8859-2?q?utf8-s=C3=BCbj=C3=ABct?=\" msgtxt1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"detects ambiguous reference/file conflict">)} 
      {
        (SQ <"\n"> <"\techo master >master &&\n"> <"\tgit add master &&\n"> 
          <"\tgit commit -m\"add master\" &&\n"> <"\ttest_must_fail git send-email --dry-run master 2>errors &&\n"> <"\tgrep disambiguate errors\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"feed two files">)} 
      {
        (SQ <"\n"> <"\trm -fr outdir &&\n"> <"\tgit format-patch -2 -o outdir &&\n"> 
          <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\toutdir/000?-*.patch 2>errors >out &&\n"> <"\tgrep \"^Subject: \" out >subjects &&\n"> 
          <"\ttest \"z$(sed -n -e 1p subjects)\" = \"zSubject: [PATCH 1/2] Second.\" &&\n"> <"\ttest \"z$(sed -n -e 2p subjects)\" = \"zSubject: [PATCH 2/2] add master\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"in-reply-to but no threading">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--in-reply-to=\"<in-reply-id@example.com>\" \\\n"> 
          <"\t\t--no-thread \\\n"> <"\t\t$patches |\n"> <"\tgrep \"In-Reply-To: <in-reply-id@example.com>\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"no in-reply-to and no threading">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--no-thread \\\n"> <"\t\t$patches $patches >stdout &&\n"> 
          <"\t! grep \"In-Reply-To: \" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"threading but no chain-reply-to">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t--thread \\\n"> <"\t\t--no-chain-reply-to \\\n"> 
          <"\t\t$patches $patches >stdout &&\n"> <"\tgrep \"In-Reply-To: \" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.to works">)} 
      {
        (SQ <"\n"> <"\tgit config --replace-all sendemail.to \"Somebody <somebody@ex.com>\" &&\n"> 
          <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t$patches $patches >stdout &&\n"> <"\tgrep \"To: Somebody <somebody@ex.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--no-to overrides sendemail.to">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--no-to \\\n"> <"\t\t--to=nobody@example.com \\\n"> <"\t\t$patches $patches >stdout &&\n"> 
          <"\tgrep \"To: nobody@example.com\" stdout &&\n"> <"\t! grep \"To: Somebody <somebody@ex.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.cc works">)} 
      {
        (SQ <"\n"> <"\tgit config --replace-all sendemail.cc \"Somebody <somebody@ex.com>\" &&\n"> 
          <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t$patches $patches >stdout &&\n"> <"\tgrep \"Cc: Somebody <somebody@ex.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--no-cc overrides sendemail.cc">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--no-cc \\\n"> <"\t\t--cc=bodies@example.com \\\n"> <"\t\t--to=nobody@example.com \\\n"> 
          <"\t\t$patches $patches >stdout &&\n"> <"\tgrep \"Cc: bodies@example.com\" stdout &&\n"> 
          <"\t! grep \"Cc: Somebody <somebody@ex.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.bcc works">)} 
      {
        (SQ <"\n"> <"\tgit config --replace-all sendemail.bcc \"Other <other@ex.com>\" &&\n"> 
          <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server relay.example.com \\\n"> <"\t\t$patches $patches >stdout &&\n"> 
          <"\tgrep \"RCPT TO:<other@ex.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--no-bcc overrides sendemail.bcc">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--no-bcc \\\n"> <"\t\t--bcc=bodies@example.com \\\n"> <"\t\t--to=nobody@example.com \\\n"> 
          <"\t\t--smtp-server relay.example.com \\\n"> <"\t\t$patches $patches >stdout &&\n"> <"\tgrep \"RCPT TO:<bodies@example.com>\" stdout &&\n"> 
          <"\t! grep \"RCPT TO:<other@ex.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"patches To headers are used by default">)} 
      {
        (SQ <"\n"> <"\tpatch=$(git format-patch -1 --to=\"bodies@example.com\") &&\n"> 
          <"\ttest_when_finished \"rm $patch\" &&\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--smtp-server relay.example.com \\\n"> <"\t\t$patch >stdout &&\n"> <"\tgrep \"RCPT TO:<bodies@example.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"patches To headers are appended to">)} 
      {
        (SQ <"\n"> <"\tpatch=$(git format-patch -1 --to=\"bodies@example.com\") &&\n"> 
          <"\ttest_when_finished \"rm $patch\" &&\n"> <"\tgit send-email \\\n"> <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server relay.example.com \\\n"> <"\t\t$patch >stdout &&\n"> 
          <"\tgrep \"RCPT TO:<bodies@example.com>\" stdout &&\n"> <"\tgrep \"RCPT TO:<nobody@example.com>\" stdout\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"To headers from files reset each patch">)} 
      {
        (SQ <"\n"> <"\tpatch1=$(git format-patch -1 --to=\"bodies@example.com\") &&\n"> 
          <"\tpatch2=$(git format-patch -1 --to=\"other@example.com\" HEAD~) &&\n"> <"\ttest_when_finished \"rm $patch1 && rm $patch2\" &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--dry-run \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=\"nobody@example.com\" \\\n"> 
          <"\t\t--smtp-server relay.example.com \\\n"> <"\t\t$patch1 $patch2 >stdout &&\n"> 
          <"\ttest $(grep -c \"RCPT TO:<bodies@example.com>\" stdout) = 1 &&\n"> <"\ttest $(grep -c \"RCPT TO:<nobody@example.com>\" stdout) = 2 &&\n"> 
          <"\ttest $(grep -c \"RCPT TO:<other@example.com>\" stdout) = 1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"cat >email-using-8bit <<\\EOF\n"> 
          <"From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001\n"> <"Message-Id: <bogus-message-id@example.com>\n"> <"From: author@example.com\n"> 
          <"Date: Sat, 12 Jun 2010 15:53:58 +0200\n"> <"Subject: subject goes here\n"> <"\n"> <"Dieser deutsche Text enth\u00e4lt einen Umlaut!\n"> <"EOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {(SQ <"\n"> <"\techo \"Subject: subject goes here\" >expected\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"ASCII subject is not RFC2047 quoted">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\techo bogus |\n"> 
          <"\tgit send-email --from=author@example.com --to=nobody@example.com \\\n"> <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\t--8bit-encoding=UTF-8 \\\n"> 
          <"\t\t\temail-using-8bit >stdout &&\n"> <"\tgrep \"Subject\" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >content-type-decl <<-\\EOF\n"> <"\tMIME-Version: 1.0\n"> 
          <"\tContent-Type: text/plain; charset=UTF-8\n"> <"\tContent-Transfer-Encoding: 8bit\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"asks about and fixes 8bit encodings">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\techo |\n"> 
          <"\tgit send-email --from=author@example.com --to=nobody@example.com \\\n"> <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\temail-using-8bit >stdout &&\n"> 
          <"\tgrep \"do not declare a Content-Transfer-Encoding\" stdout &&\n"> <"\tgrep email-using-8bit stdout &&\n"> <"\tgrep \"Which 8bit encoding\" stdout &&\n"> 
          <"\tegrep \"Content|MIME\" msgtxt1 >actual &&\n"> <"\ttest_cmp actual content-type-decl\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.8bitEncoding works">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\tgit config sendemail.assume8bitEncoding UTF-8 &&\n"> <"\techo bogus |\n"> <"\tgit send-email --from=author@example.com --to=nobody@example.com \\\n"> 
          <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\temail-using-8bit >stdout &&\n"> <"\tegrep \"Content|MIME\" msgtxt1 >actual &&\n"> 
          <"\ttest_cmp actual content-type-decl\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--8bit-encoding overrides sendemail.8bitEncoding">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\tgit config sendemail.assume8bitEncoding \"bogus too\" &&\n"> <"\techo bogus |\n"> <"\tgit send-email --from=author@example.com --to=nobody@example.com \\\n"> 
          <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\t--8bit-encoding=UTF-8 \\\n"> <"\t\t\temail-using-8bit >stdout &&\n"> 
          <"\tegrep \"Content|MIME\" msgtxt1 >actual &&\n"> <"\ttest_cmp actual content-type-decl\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >email-using-8bit <<-\\EOF\n"> 
          <"\tFrom fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001\n"> <"\tMessage-Id: <bogus-message-id@example.com>\n"> <"\tFrom: author@example.com\n"> 
          <"\tDate: Sat, 12 Jun 2010 15:53:58 +0200\n"> <"\tSubject: Dieser Betreff enth\u00e4lt auch einen Umlaut!\n"> <"\n"> <"\tNothing to see here.\n"> 
          <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> 
          <"\tSubject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?=\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"--8bit-encoding also treats subject">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\techo bogus |\n"> 
          <"\tgit send-email --from=author@example.com --to=nobody@example.com \\\n"> <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\t\t--8bit-encoding=UTF-8 \\\n"> 
          <"\t\t\temail-using-8bit >stdout &&\n"> <"\tgrep \"Subject\" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >email-using-8bit <<-\\EOF\n"> 
          <"\tFrom fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001\n"> <"\tMessage-Id: <bogus-message-id@example.com>\n"> <"\tFrom: A U Thor <author@example.com>\n"> 
          <"\tDate: Sat, 12 Jun 2010 15:53:58 +0200\n"> <"\tContent-Type: text/plain; charset=UTF-8\n"> <"\tSubject: Nothing to see here.\n"> <"\n"> 
          <"\tDieser Betreff enth\u00e4lt auch einen Umlaut!\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"sendemail.transferencoding=7bit fails on 8bit data">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit config sendemail.transferEncoding 7bit &&\n"> 
          <"\ttest_must_fail git send-email \\\n"> <"\t\t--transfer-encoding=7bit \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\temail-using-8bit \\\n"> <"\t\t2>errors >out &&\n"> <"\tgrep \"cannot send message as 7bit\" errors &&\n"> 
          <"\ttest -z \"$(ls msgtxt*)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--transfer-encoding overrides sendemail.transferEncoding">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit config sendemail.transferEncoding 8bit &&\n"> 
          <"\ttest_must_fail git send-email \\\n"> <"\t\t--transfer-encoding=7bit \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
          <"\t\temail-using-8bit \\\n"> <"\t\t2>errors >out &&\n"> <"\tgrep \"cannot send message as 7bit\" errors &&\n"> 
          <"\ttest -z \"$(ls msgtxt*)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.transferencoding=8bit">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--transfer-encoding=8bit \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\temail-using-8bit \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tsed ">
        ) (1) (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) (SQ <" msgtxt1 >actual &&\n"> <"\tsed ">) (1) 
        (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) 
        (SQ <" email-using-8bit >expected &&\n"> <"\ttest_cmp expected actual\n">)
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> 
          <"\tDieser Betreff enth=C3=A4lt auch einen Umlaut!\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"8-bit and sendemail.transferencoding=quoted-printable">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--transfer-encoding=quoted-printable \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\temail-using-8bit \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tsed ">
        ) (1) (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) 
        (SQ <" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">)
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> 
          <"\tRGllc2VyIEJldHJlZmYgZW50aMOkbHQgYXVjaCBlaW5lbiBVbWxhdXQhCg==\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"8-bit and sendemail.transferencoding=base64">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--transfer-encoding=base64 \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\temail-using-8bit \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tsed ">
        ) (1) (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) 
        (SQ <" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">)
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >email-using-qp <<-\\EOF\n"> 
          <"\tFrom fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001\n"> <"\tMessage-Id: <bogus-message-id@example.com>\n"> <"\tFrom: A U Thor <author@example.com>\n"> 
          <"\tDate: Sat, 12 Jun 2010 15:53:58 +0200\n"> <"\tMIME-Version: 1.0\n"> <"\tContent-Transfer-Encoding: quoted-printable\n"> 
          <"\tContent-Type: text/plain; charset=UTF-8\n"> <"\tSubject: Nothing to see here.\n"> <"\n"> <"\tDieser Betreff enth=C3=A4lt auch einen Umlaut!\n"> 
          <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"convert from quoted-printable to base64">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--transfer-encoding=base64 \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\temail-using-qp \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tsed ">
        ) (1) (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) 
        (SQ <" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">)
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (DQ ("\n") ("tr -d '") (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) ("015' | tr '%' '") 
          (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) ("015' >email-using-crlf <<EOF\n") 
          ("From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001\n") ("Message-Id: <bogus-message-id@example.com>\n") ("From: A U Thor <author@example.com>\n") 
          ("Date: Sat, 12 Jun 2010 15:53:58 +0200\n") ("Content-Type: text/plain; charset=UTF-8\n") ("Subject: Nothing to see here.\n") ("\n") 
          ("Look, I have a CRLF and an = sign!%\n") ("EOF\n")
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> <"\tLook, I have a CRLF and an =3D sign!=0D\n"> 
          <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"CRLF and sendemail.transferencoding=quoted-printable">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--transfer-encoding=quoted-printable \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\temail-using-crlf \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tsed ">
        ) (1) (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) 
        (SQ <" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">)
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expect">)} 
      {
        (SQ <"\n"> <"\tcat >expected <<-\\EOF\n"> 
          <"\tTG9vaywgSSBoYXZlIGEgQ1JMRiBhbmQgYW4gPSBzaWduIQ0K\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"CRLF and sendemail.transferencoding=base64">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--transfer-encoding=base64 \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\temail-using-crlf \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tsed ">
        ) (1) (Lit_Comma ",") (/) (Lit_Other "^") (Lit_Other "$") (/d) 
        (SQ <" msgtxt1 >actual &&\n"> <"\ttest_cmp expected actual\n">)
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"refusing to send cover letter template">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\trm -fr outdir &&\n"> 
          <"\tgit format-patch --cover-letter -2 -o outdir &&\n"> <"\ttest_must_fail git send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\toutdir/0002-*.patch \\\n"> 
          <"\t\toutdir/0000-*.patch \\\n"> <"\t\toutdir/0001-*.patch \\\n"> <"\t\t2>errors >out &&\n"> <"\tgrep \"SUBJECT HERE\" errors &&\n"> 
          <"\ttest -z \"$(ls msgtxt*)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--force sends cover letter template anyway">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> <"\trm -fr outdir &&\n"> 
          <"\tgit format-patch --cover-letter -2 -o outdir &&\n"> <"\tgit send-email \\\n"> <"\t\t--force \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> 
          <"\t\t--to=nobody@example.com \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\toutdir/0002-*.patch \\\n"> 
          <"\t\toutdir/0000-*.patch \\\n"> <"\t\toutdir/0001-*.patch \\\n"> <"\t\t2>errors >out &&\n"> <"\t! grep \"SUBJECT HERE\" errors &&\n"> 
          <"\ttest -n \"$(ls msgtxt*)\"\n">
        )
      }
    )
    (FuncDef
      name: test_cover_addresses
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:header)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [3496]
                )
              ]
              spids: [3496]
            )
            (C {(shift)})
            (AndOr
              children: [
                (C {(clean_fake_sendmail)})
                (AndOr
                  children: [
                    (C {(rm)} {(-fr)} {(outdir)})
                    (AndOr
                      children: [
                        (C {(git)} {(format-patch)} {(--cover-letter)} {(-2)} {(-o)} {(outdir)})
                        (AndOr
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:cover)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (C {(echo)} {(outdir/0000-) (Lit_Other "*") (.patch)})
                                            ]
                                          )
                                        left_token: <Left_CommandSub "$(">
                                        spids: [3535 3541]
                                      )
                                    }
                                  spids: [3534]
                                )
                              ]
                              spids: [3534]
                            )
                            (AndOr
                              children: [
                                (C {(mv)} {($ VSub_Name "$cover")} {(cover-to-edit.patch)})
                                (AndOr
                                  children: [
                                    (SimpleCommand
                                      words: [
                                        {(perl)}
                                        {(-pe)}
                                        {
                                          (DQ ("s/^From:/") ($ VSub_Name "$header") (": extra") 
                                            (EscapedLiteralPart
                                              token: <Lit_EscapedChar "\\@">
                                            ) (address.com) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("From:/")
                                          )
                                        }
                                        {(cover-to-edit.patch)}
                                      ]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: -1
                                          arg_word: {(DQ ($ VSub_Name "$cover"))}
                                          spids: [3571]
                                        )
                                      ]
                                    )
                                    (AndOr
                                      children: [
                                        (SimpleCommand
                                          words: [
                                            {(git)}
                                            {(send-email)}
                                            {(--force)}
                                            {(--from) (Lit_Other "=") 
                                              (DQ ("Example <nobody@example.com>"))
                                            }
                                            {(--no-to)}
                                            {(--no-cc)}
                                            {(DQ ($ VSub_At "$@"))}
                                            {(--smtp-server) (Lit_Other "=") 
                                              (DQ 
                                                (CommandSubPart
                                                  command_list: (CommandList children:[(C {(pwd)})])
                                                  left_token: <Left_CommandSub "$(">
                                                  spids: [3612 3614]
                                                ) (/fake.sendmail)
                                              )
                                            }
                                            {(outdir/0000-) (Lit_Other "*") (.patch)}
                                            {(outdir/0001-) (Lit_Other "*") (.patch)}
                                            {(outdir/0002-) (Lit_Other "*") (.patch)}
                                          ]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_Great
                                              fd: 2
                                              arg_word: {(errors)}
                                              spids: [3638]
                                            )
                                            (Redir
                                              op_id: Redir_Great
                                              fd: -1
                                              arg_word: {(out)}
                                              spids: [3641]
                                            )
                                          ]
                                        )
                                        (AndOr
                                          children: [
                                            (SimpleCommand
                                              words: [
                                                {(grep)}
                                                {
                                                  (DQ ("^") ($ VSub_Name "$header") 
                                                    (": extra@address.com")
                                                  )
                                                }
                                                {(msgtxt1)}
                                              ]
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_Great
                                                  fd: -1
                                                  arg_word: {(to1)}
                                                  spids: [3657]
                                                )
                                              ]
                                            )
                                            (AndOr
                                              children: [
                                                (SimpleCommand
                                                  words: [
                                                    {(grep)}
                                                    {
                                                      (DQ ("^") ($ VSub_Name "$header") 
                                                        (": extra@address.com")
                                                      )
                                                    }
                                                    {(msgtxt2)}
                                                  ]
                                                  redirects: [
                                                    (Redir
                                                      op_id: Redir_Great
                                                      fd: -1
                                                      arg_word: {(to2)}
                                                      spids: [3673]
                                                    )
                                                  ]
                                                )
                                                (AndOr
                                                  children: [
                                                    (SimpleCommand
                                                      words: [
                                                        {(grep)}
                                                        {
                                                          (DQ ("^") ($ VSub_Name "$header") 
                                                            (": extra@address.com")
                                                          )
                                                        }
                                                        {(msgtxt3)}
                                                      ]
                                                      redirects: [
                                                        (Redir
                                                          op_id: Redir_Great
                                                          fd: -1
                                                          arg_word: {(to3)}
                                                          spids: [3689]
                                                        )
                                                      ]
                                                    )
                                                    (AndOr
                                                      children: [
                                                        (C {(test_line_count)} {(Lit_Other "=")} {(1)} 
                                                          {(to1)}
                                                        )
                                                        (AndOr
                                                          children: [
                                                            (C {(test_line_count)} {(Lit_Other "=")} 
                                                              {(1)} {(to2)}
                                                            )
                                                            (C {(test_line_count)} {(Lit_Other "=")} 
                                                              {(1)} {(to3)}
                                                            )
                                                          ]
                                                          op_id: Op_DAmp
                                                        )
                                                      ]
                                                      op_id: Op_DAmp
                                                    )
                                                  ]
                                                  op_id: Op_DAmp
                                                )
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [3493]
        )
      spids: [3488 3492]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"to-cover adds To to all mail">)} 
      {(SQ <"\n"> <"\ttest_cover_addresses \"To\" --to-cover\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"cc-cover adds Cc to all mail">)} 
      {(SQ <"\n"> <"\ttest_cover_addresses \"Cc\" --cc-cover\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"tocover adds To to all mail">)} 
      {(SQ <"\n"> <"\ttest_config sendemail.tocover true &&\n"> <"\ttest_cover_addresses \"To\"\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"cccover adds Cc to all mail">)} 
      {(SQ <"\n"> <"\ttest_config sendemail.cccover true &&\n"> <"\ttest_cover_addresses \"Cc\"\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"escaped quotes in sendemail.aliasfiletype=mutt">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd \\\\\\\"Dot U. Sir\\\\\\\" <somebody@example.org>\" >.mutt &&\n"> <"\tgit config --replace-all sendemail.aliasesfile \"$(pwd)/.mutt\" &&\n"> 
          <"\tgit config sendemail.aliasfiletype mutt &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=sbd \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\toutdir/0001-*.patch \\\n"> <"\t\t2>errors >out &&\n"> 
          <"\tgrep \"^!somebody@example\\.org!$\" commandline1 &&\n"> <"\tgrep -F \"To: \\\"Dot U. Sir\\\" <somebody@example.org>\" out\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.aliasfiletype=mailrc">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd  somebody@example.org\" >.mailrc &&\n"> <"\tgit config --replace-all sendemail.aliasesfile \"$(pwd)/.mailrc\" &&\n"> 
          <"\tgit config sendemail.aliasfiletype mailrc &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=sbd \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\toutdir/0001-*.patch \\\n"> <"\t\t2>errors >out &&\n"> 
          <"\tgrep \"^!somebody@example\\.org!$\" commandline1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"sendemail.aliasfile=~/.mailrc">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd  someone@example.org\" >\"$HOME/.mailrc\" &&\n"> <"\tgit config --replace-all sendemail.aliasesfile \"~/.mailrc\" &&\n"> 
          <"\tgit config sendemail.aliasfiletype mailrc &&\n"> <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to=sbd \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\toutdir/0001-*.patch \\\n"> <"\t\t2>errors >out &&\n"> 
          <"\tgrep \"^!someone@example\\.org!$\" commandline1\n">
        )
      }
    )
    (FuncDef
      name: test_dump_aliases
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:msg)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number "$1"))}
                      spids: [3867]
                    )
                  ]
                  spids: [3867]
                )
                (AndOr
                  children: [
                    (C {(shift)})
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:filetype)
                              op: Equal
                              rhs: {(DQ ($ VSub_Number "$1"))}
                              spids: [3879]
                            )
                          ]
                          spids: [3879]
                        )
                        (AndOr
                          children: [
                            (C {(shift)})
                            (AndOr
                              children: [
                                (SimpleCommand
                                  words: [{(printf)} {(SQ <"%s\\n">)} {(DQ ($ VSub_At "$@"))}]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: -1
                                      arg_word: {(expect)}
                                      spids: [3901]
                                    )
                                  ]
                                )
                                (AndOr
                                  children: [
                                    (SimpleCommand
                                      words: [{(cat)}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: -1
                                          arg_word: {(.tmp-email-aliases)}
                                          spids: [3909]
                                        )
                                      ]
                                    )
                                    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
                                      {(DQ ($ VSub_Name "$msg"))} 
                                      {
                                        (SQ <"\n"> <"\t\tclean_fake_sendmail && rm -fr outdir &&\n"> 
                                          <
"\t\tgit config --replace-all sendemail.aliasesfile \\\n"
                                          > <"\t\t\t\"$(pwd)/.tmp-email-aliases\" &&\n"> 
                                          <
"\t\tgit config sendemail.aliasfiletype \"$filetype\" &&\n"
                                          > <"\t\tgit send-email --dump-aliases 2>errors >actual &&\n"> <"\t\ttest_cmp expect actual\n"> <"\t">
                                        )
                                      }
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [3864]
        )
      spids: [3859 3863]
    )
    (SimpleCommand
      words: [
        {(test_dump_aliases)}
        {(SQ <"--dump-aliases sendmail format">)}
        {(SQ <sendmail>)}
        {(SQ <abgroup>)}
        {(SQ <alice>)}
        {(SQ <bcgrp>)}
        {(SQ <bob>)}
        {(SQ <chloe>)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("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")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [3980]
        )
      ]
    )
    (SimpleCommand
      words: [
        {(test_dump_aliases)}
        {(SQ <"--dump-aliases mutt format">)}
        {(SQ <mutt>)}
        {(SQ <alice>)}
        {(SQ <bob>)}
        {(SQ <chloe>)}
        {(SQ <donald>)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("alias alice Alice W Land <awol@example.com>\n") 
              ("alias donald Donald C Carlton <donc@example.com>\n") ("alias bob Robert Bobbyton <bob@example.com>\n") ("alias chloe chloe@example.com\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4021]
        )
      ]
    )
    (SimpleCommand
      words: [
        {(test_dump_aliases)}
        {(SQ <"--dump-aliases mailrc format">)}
        {(SQ <mailrc>)}
        {(SQ <alice>)}
        {(SQ <bob>)}
        {(SQ <chloe>)}
        {(SQ <eve>)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("alias alice   Alice W Land <awol@example.com>\n") 
              ("alias eve     Eve <eve@example.com>\n") ("alias bob     Robert Bobbyton <bob@example.com>\n") ("alias chloe   chloe@example.com\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4062]
        )
      ]
    )
    (SimpleCommand
      words: [
        {(test_dump_aliases)}
        {(SQ <"--dump-aliases pine format">)}
        {(SQ <pine>)}
        {(SQ <alice>)}
        {(SQ <bob>)}
        {(SQ <chloe>)}
        {(SQ <eve>)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("alice\tAlice W Land\t<awol@example.com>\n") ("eve\tEve\t<eve@example.com>\n") 
              ("bob\tRobert\tBobbyton <bob@example.com>\n") ("chloe\t\tchloe@example.com\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4103]
        )
      ]
    )
    (SimpleCommand
      words: [
        {(test_dump_aliases)}
        {(SQ <"--dump-aliases gnus format">)}
        {(SQ <gnus>)}
        {(SQ <alice>)}
        {(SQ <bob>)}
        {(SQ <chloe>)}
        {(SQ <eve>)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("(define-mail-alias \"alice\" \"awol@example.com\")\n") 
              ("(define-mail-alias \"eve\" \"eve@example.com\")\n") ("(define-mail-alias \"bob\" \"bob@example.com\")\n") 
              ("(define-mail-alias \"chloe\" \"chloe@example.com\")\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4144]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"--dump-aliases must be used alone">)} 
      {
        (SQ <"\n"> 
          <
"\ttest_must_fail git send-email --dump-aliases --to=janice@example.com -1 refs/heads/accounting\n"
          >
        )
      }
    )
    (FuncDef
      name: test_sendmail_aliases
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:msg)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number "$1"))}
                      spids: [4169]
                    )
                  ]
                  spids: [4169]
                )
                (AndOr
                  children: [
                    (C {(shift)})
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:expect)
                              op: Equal
                              rhs: {(DQ ($ VSub_At "$@"))}
                              spids: [4181]
                            )
                          ]
                          spids: [4181]
                        )
                        (AndOr
                          children: [
                            (SimpleCommand
                              words: [{(cat)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(.tmp-email-aliases)}
                                  spids: [4191]
                                )
                              ]
                            )
                            (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
                              {(DQ ($ VSub_Name "$msg"))} 
                              {
                                (SQ <"\n"> <"\t\tclean_fake_sendmail && rm -fr outdir &&\n"> 
                                  <"\t\tgit format-patch -1 -o outdir &&\n"> <"\t\tgit config --replace-all sendemail.aliasesfile \\\n"> 
                                  <"\t\t\t\"$(pwd)/.tmp-email-aliases\" &&\n"> <"\t\tgit config sendemail.aliasfiletype sendmail &&\n"> <"\t\tgit send-email \\\n"> 
                                  <"\t\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t\t--to=alice --to=bcgrp \\\n"> <"\t\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> 
                                  <"\t\t\toutdir/0001-*.patch \\\n"> <"\t\t\t2>errors >out &&\n"> <"\t\tfor i in $expect\n"> <"\t\tdo\n"> 
                                  <"\t\t\tgrep \"^!$i!$\" commandline1 || return 1\n"> <"\t\tdone\n"> <"\t">
                                )
                              }
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [4166]
        )
      spids: [4161 4165]
    )
    (SimpleCommand
      words: [
        {(test_sendmail_aliases)}
        {(SQ <"sendemail.aliasfiletype=sendmail">)}
        {(SQ <"awol@example\\.com">)}
        {(SQ <"bob@example\\.com">)}
        {(SQ <"chloe@example\\.com">)}
        {(SQ <"o@example\\.com">)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("alice: Alice W Land <awol@example.com>\n") 
              ("bob: Robert Bobbyton <bob@example.com>\n") ("# this is a comment\n") ("   # this is also a comment\n") ("chloe: chloe@example.com\n") 
              ("abgroup: alice, bob\n") ("bcgrp: bob, chloe, Other <o@example.com>\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4259]
        )
      ]
    )
    (SimpleCommand
      words: [
        {(test_sendmail_aliases)}
        {(SQ <"sendmail aliases line folding">)}
        {(alice1)}
        {(bob1)}
        {(bob2)}
        {(chuck1)}
        {(chuck2)}
        {(darla1)}
        {(darla2)}
        {(darla3)}
        {(elton1)}
        {(elton2)}
        {(elton3)}
        {(fred1)}
        {(fred2)}
        {(greg1)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {("alice: alice1\n") ("bob: bob1,\\\n") ("bob2\n") ("chuck: chuck1,\n") ("    chuck2\n") 
              ("darla: darla1,\\\n") ("darla2,\n") ("    darla3\n") ("elton: elton1,\n") ("    elton2,\\\n") ("elton3\n") ("fred: fred1,\\\n") 
              ("    fred2\n") ("greg: greg1\n") ("bcgrp: bob, chuck, darla, elton, fred, greg\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4312]
        )
      ]
    )
    (SimpleCommand
      words: [
        {(test_sendmail_aliases)}
        {(SQ <"sendmail aliases tolerate bogus line folding">)}
        {(alice1)}
        {(bob1)}
      ]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: {("    alice: alice1\n") ("bcgrp: bob1\\\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4329]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_sendmail_aliases)} {(SQ <"sendmail aliases empty">)} {(alice)} {(bcgrp)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: {}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [4344]
        )
      ]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"alias support in To header">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd  someone@example.org\" >.mailrc &&\n"> <"\ttest_config sendemail.aliasesfile \".mailrc\" &&\n"> 
          <"\ttest_config sendemail.aliasfiletype mailrc &&\n"> <"\tgit format-patch --stdout -1 --to=sbd >aliased.patch &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\taliased.patch \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tgrep \"^!someone@example\\.org!$\" commandline1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"alias support in Cc header">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd  someone@example.org\" >.mailrc &&\n"> <"\ttest_config sendemail.aliasesfile \".mailrc\" &&\n"> 
          <"\ttest_config sendemail.aliasfiletype mailrc &&\n"> <"\tgit format-patch --stdout -1 --cc=sbd >aliased.patch &&\n"> <"\tgit send-email \\\n"> 
          <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\taliased.patch \\\n"> 
          <"\t\t2>errors >out &&\n"> <"\tgrep \"^!someone@example\\.org!$\" commandline1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"tocmd works with aliases">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd  someone@example.org\" >.mailrc &&\n"> <"\ttest_config sendemail.aliasesfile \".mailrc\" &&\n"> 
          <"\ttest_config sendemail.aliasfiletype mailrc &&\n"> <"\tgit format-patch --stdout -1 >tocmd.patch &&\n"> <"\techo tocmd--sbd >>tocmd.patch &&\n"> 
          <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--to-cmd=./tocmd-sed \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\ttocmd.patch \\\n"> <"\t\t2>errors >out &&\n"> 
          <"\tgrep \"^!someone@example\\.org!$\" commandline1\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"cccmd works with aliases">)} 
      {
        (SQ <"\n"> <"\tclean_fake_sendmail &&\n"> 
          <"\techo \"alias sbd  someone@example.org\" >.mailrc &&\n"> <"\ttest_config sendemail.aliasesfile \".mailrc\" &&\n"> 
          <"\ttest_config sendemail.aliasfiletype mailrc &&\n"> <"\tgit format-patch --stdout -1 >cccmd.patch &&\n"> <"\techo cccmd--sbd >>cccmd.patch &&\n"> 
          <"\tgit send-email \\\n"> <"\t\t--from=\"Example <nobody@example.com>\" \\\n"> <"\t\t--cc-cmd=./cccmd-sed \\\n"> 
          <"\t\t--smtp-server=\"$(pwd)/fake.sendmail\" \\\n"> <"\t\tcccmd.patch \\\n"> <"\t\t2>errors >out &&\n"> 
          <"\tgrep \"^!someone@example\\.org!$\" commandline1\n">
        )
      }
    )
    (FuncDef
      name: do_xmailer_test
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:expected)
                      op: Equal
                      rhs: {($ VSub_Number "$1")}
                      spids: [4457]
                    )
                    (assign_pair
                      lhs: (LhsName name:params)
                      op: Equal
                      rhs: {($ VSub_Number "$2")}
                      spids: [4460]
                    )
                  ]
                  spids: [4457]
                )
                (AndOr
                  children: [
                    (C {(git)} {(format-patch)} {(-1)})
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [
                            {(git)}
                            {(send-email)}
                            {(--from) (Lit_Other "=") (DQ ("Example <nobody@example.com>"))}
                            {(--to) (Lit_Other "=") (someone) (Lit_Other "@") (example.com)}
                            {(--smtp-server) (Lit_Other "=") 
                              (DQ 
                                (CommandSubPart
                                  command_list: (CommandList children:[(C {(pwd)})])
                                  left_token: <Left_CommandSub "$(">
                                  spids: [4500 4502]
                                ) (/fake.sendmail)
                              )
                            }
                            {($ VSub_Name "$params")}
                            {(0001-) (Lit_Other "*") (.patch)}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(errors)}
                              spids: [4518]
                            )
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(out)}
                              spids: [4521]
                            )
                          ]
                        )
                        (AndOr
                          children: [
                            (BraceGroup
                              children: [
                                (Sentence
                                  child: 
                                    (AndOr
                                      children: [
                                        (C {(grep)} {(SQ <"^X-Mailer:">)} {(out)})
                                        (C {(Lit_Other ":")})
                                      ]
                                      op_id: Op_DPipe
                                    )
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(mailer)}
                                  spids: [4544]
                                )
                              ]
                              spids: [4527]
                            )
                            (C {(test_line_count)} {(Lit_Other "=")} {($ VSub_Name "$expected")} 
                              {(mailer)}
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [4454]
        )
      spids: [4449 4453]
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--[no-]xmailer without any configuration">)} {(SQ <"\n"> <"\tdo_xmailer_test 1 \"--xmailer\" &&\n"> <"\tdo_xmailer_test 0 \"--no-xmailer\"\n">)}
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--[no-]xmailer with sendemail.xmailer=true">)} 
      {
        (SQ <"\n"> <"\ttest_config sendemail.xmailer true &&\n"> <"\tdo_xmailer_test 1 \"\" &&\n"> 
          <"\tdo_xmailer_test 0 \"--no-xmailer\" &&\n"> <"\tdo_xmailer_test 1 \"--xmailer\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"--[no-]xmailer with sendemail.xmailer=false">)} 
      {
        (SQ <"\n"> <"\ttest_config sendemail.xmailer false &&\n"> <"\tdo_xmailer_test 0 \"\" &&\n"> 
          <"\tdo_xmailer_test 0 \"--no-xmailer\" &&\n"> <"\tdo_xmailer_test 1 \"--xmailer\"\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"setup expected-list">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t--dry-run \\\n"> 
          <"\t--from=\"Example <from@example.com>\" \\\n"> <"\t--to=\"To 1 <to1@example.com>\" \\\n"> <"\t--to=\"to2@example.com\" \\\n"> 
          <"\t--to=\"to3@example.com\" \\\n"> <"\t--cc=\"Cc 1 <cc1@example.com>\" \\\n"> <"\t--cc=\"Cc2 <cc2@example.com>\" \\\n"> 
          <"\t--bcc=\"bcc1@example.com\" \\\n"> <"\t--bcc=\"bcc2@example.com\" \\\n"> <"\t0001-add-master.patch | replace_variable_fields \\\n"> 
          <"\t>expected-list\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"use email list in --cc --to and --bcc">)} 
      {
        (SQ <"\n"> <"\tgit send-email \\\n"> <"\t--dry-run \\\n"> 
          <"\t--from=\"Example <from@example.com>\" \\\n"> <"\t--to=\"To 1 <to1@example.com>, to2@example.com\" \\\n"> <"\t--to=\"to3@example.com\" \\\n"> 
          <"\t--cc=\"Cc 1 <cc1@example.com>, Cc2 <cc2@example.com>\" \\\n"> <"\t--bcc=\"bcc1@example.com, bcc2@example.com\" \\\n"> 
          <"\t0001-add-master.patch | replace_variable_fields \\\n"> <"\t>actual-list &&\n"> <"\ttest_cmp expected-list actual-list\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} {(SQ <"aliases work with email list">)} 
      {
        (SQ <"\n"> <"\techo \"alias to2 to2@example.com\" >.mutt &&\n"> 
          <"\techo \"alias cc1 Cc 1 <cc1@example.com>\" >>.mutt &&\n"> <"\ttest_config sendemail.aliasesfile \".mutt\" &&\n"> 
          <"\ttest_config sendemail.aliasfiletype mutt &&\n"> <"\tgit send-email \\\n"> <"\t--dry-run \\\n"> <"\t--from=\"Example <from@example.com>\" \\\n"> 
          <"\t--to=\"To 1 <to1@example.com>, to2, to3@example.com\" \\\n"> <"\t--cc=\"cc1, Cc2 <cc2@example.com>\" \\\n"> <"\t--bcc=\"bcc1@example.com, bcc2@example.com\" \\\n"> 
          <"\t0001-add-master.patch | replace_variable_fields \\\n"> <"\t>actual-list &&\n"> <"\ttest_cmp expected-list actual-list\n">
        )
      }
    )
    (C {(test_expect_success)} {($ VSub_Name "$PREREQ")} 
      {(SQ <"leading and trailing whitespaces are removed">)} 
      {
        (SQ <"\n"> <"\techo \"alias to2 to2@example.com\" >.mutt &&\n"> 
          <"\techo \"alias cc1 Cc 1 <cc1@example.com>\" >>.mutt &&\n"> <"\ttest_config sendemail.aliasesfile \".mutt\" &&\n"> 
          <"\ttest_config sendemail.aliasfiletype mutt &&\n"> <"\tTO1=$(echo \"QTo 1 <to1@example.com>\" | q_to_tab) &&\n"> 
          <"\tTO2=$(echo \"QZto2\" | qz_to_tab_space) &&\n"> <"\tCC1=$(echo \"cc1\" | append_cr) &&\n"> <"\tBCC1=$(echo \"Q bcc1@example.com Q\" | q_to_nul) &&\n"> 
          <"\tgit send-email \\\n"> <"\t--dry-run \\\n"> <"\t--from=\"\tExample <from@example.com>\" \\\n"> <"\t--to=\"$TO1\" \\\n"> 
          <"\t--to=\"$TO2\" \\\n"> <"\t--to=\"  to3@example.com   \" \\\n"> <"\t--cc=\"$CC1\" \\\n"> 
          <"\t--cc=\"Cc2 <cc2@example.com>\" \\\n"> <"\t--bcc=\"$BCC1\" \\\n"> <"\t--bcc=\"bcc2@example.com\" \\\n"> 
          <"\t0001-add-master.patch | replace_variable_fields \\\n"> <"\t>actual-list &&\n"> <"\ttest_cmp expected-list actual-list\n">
        )
      }
    )
    (C {(test_done)})
  ]
)