(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'i18n settings and format-patch | am pipe'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: check_encoding
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cnt)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [36]
                )
                (assign_pair
                  lhs: (LhsName name:header)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [41]
                )
                (assign_pair lhs:(LhsName name:i) op:Equal rhs:{(1)} spids:[46])
                (assign_pair lhs:(LhsName name:j) op:Equal rhs:{(0)} spids:[49])
              ]
              spids: [36]
            )
            (While
              cond: [(C {(test)} {(DQ ($ VSub_Name '$i'))} {(-le)} {($ VSub_Name '$cnt')})]
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (C {(git)} {(format-patch)} {(--encoding) (Lit_Other '=') (UTF-8)} 
                              {(--stdout)} {(HEAD) (Lit_Tilde '~') ($ VSub_Name '$i') (..HEAD) (Lit_Tilde '~') ($ VSub_Name '$j')}
                            )
                            (C {(grep)} {(DQ ('^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?='))})
                          ]
                          negated: False
                        )
                        (AndOr
                          children: [
                            (Pipeline
                              children: [
                                (C {(git)} {(cat-file)} {(commit)} 
                                  {(HEAD) (Lit_Tilde '~') ($ VSub_Name '$j')}
                                )
                                (Case
                                  to_match: {(DQ ($ VSub_Name '$header'))}
                                  arms: [
                                    (case_arm
                                      pat_list: [{(8859)}]
                                      action: [(C {(grep)} {(DQ ('^encoding ISO8859-1'))})]
                                      spids: [120 121 130 16777215]
                                    )
                                    (case_arm
                                      pat_list: [{(Lit_Other '*')}]
                                      action: [
                                        (Sentence
                                          child: (C {(grep)} {(DQ ('^encoding ISO8859-1'))})
                                          terminator: <Op_Semi ';'>
                                        )
                                        (C {(test)} {(DQ ($ VSub_QMark '$?'))} 
                                          {(KW_Bang '!') (Lit_Other '=')} {(0)}
                                        )
                                      ]
                                      spids: [133 134 155 16777215]
                                    )
                                  ]
                                  spids: [111 117 158]
                                )
                              ]
                              negated: False
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      op_id: Op_DAmp
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:j)
                          op: Equal
                          rhs: {($ VSub_Name '$i')}
                          spids: [167]
                        )
                      ]
                      spids: [167]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:i)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithWord w:{($ VSub_Name '$i')})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [172 177]
                              )
                            }
                          spids: [171]
                        )
                      ]
                      spids: [171]
                    )
                  ]
                  spids: [66 180]
                )
            )
          ]
          spids: [29]
        )
      spids: [24 28]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\n'> 
          <'\t# use UTF-8 in author and committer name to match the\n'> <'\t# i18n.commitencoding settings\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> 
          <'\ttest_tick &&\n'> <'\techo "$GIT_AUTHOR_NAME" >mine &&\n'> <'\tgit add mine &&\n'> 
          <'\tgit commit -s -m "Initial commit" &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo Hello world >mine &&\n'> <'\tgit add mine &&\n'> 
          <'\tgit commit -s -m "Second on main" &&\n'> <'\n'> <'\t# the first commit on the side branch is UTF-8\n'> <'\ttest_tick &&\n'> 
          <'\tgit checkout -b side master^ &&\n'> <'\techo Another file >yours &&\n'> <'\tgit add yours &&\n'> 
          <'\tgit commit -s -m "Second on side" &&\n'> <'\n'> <'\tif test_have_prereq !MINGW\n'> <'\tthen\n'> 
          <'\t\t# the second one on the side branch is ISO-8859-1\n'> <'\t\tgit config i18n.commitencoding ISO8859-1 &&\n'> 
          <'\t\t# use author and committer name in ISO-8859-1 to match it.\n'> <'\t\t. "$TEST_DIRECTORY"/t3901-8859-1.txt\n'> <'\tfi &&\n'> <'\ttest_tick &&\n'> 
          <'\techo Yet another >theirs &&\n'> <'\tgit add theirs &&\n'> <'\tgit commit -s -m "Third on side" &&\n'> <'\n'> <'\t# Back to default\n'> 
          <'\tgit config i18n.commitencoding UTF-8\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'format-patch output (ISO-8859-1)'>)} 
      {
        (SQ <'\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\n'> 
          <'\tgit format-patch --stdout master..HEAD^ >out-l1 &&\n'> <'\tgit format-patch --stdout HEAD^ >out-l2 &&\n'> 
          <'\tgrep "^Content-Type: text/plain; charset=ISO8859-1" out-l1 &&\n'> <'\tgrep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l1 &&\n'> 
          <'\tgrep "^Content-Type: text/plain; charset=ISO8859-1" out-l2 &&\n'> <'\tgrep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'format-patch output (UTF-8)'>)} 
      {
        (SQ <'\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\n'> 
          <'\tgit format-patch --stdout master..HEAD^ >out-u1 &&\n'> <'\tgit format-patch --stdout HEAD^ >out-u2 &&\n'> 
          <'\tgrep "^Content-Type: text/plain; charset=UTF-8" out-u1 &&\n'> <'\tgrep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u1 &&\n'> 
          <'\tgrep "^Content-Type: text/plain; charset=UTF-8" out-u2 &&\n'> <'\tgrep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rebase (U/U)'>)} 
      {
        (SQ <'\n'> <'\t# We want the result of rebase in UTF-8\n'> 
          <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\n'> <'\t# The test is about logoutputencoding not affecting the\n'> 
          <'\t# final outcome -- it is used internally to generate the\n'> <'\t# patch and the log.\n'> <'\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\n'> 
          <'\t# The result will be committed by GIT_COMMITTER_NAME --\n'> <'\t# we want UTF-8 encoded name.\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> 
          <'\tgit checkout -b test &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rebase (U/L)'>)} 
      {
        (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> 
          <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> 
          <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'rebase (L/L)'>)} 
      {
        (SQ <'\n'> <'\t# In this test we want ISO-8859-1 encoded commits as the result\n'> 
          <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> 
          <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'rebase (L/U)'>)} 
      {
        (SQ <'\n'> <'\t# This is pathological -- use UTF-8 as intermediate form\n'> 
          <'\t# to get ISO-8859-1 results.\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> 
          <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cherry-pick(U/U)'>)} 
      {
        (SQ <'\n'> <'\t# Both the commitencoding and logoutputencoding is set to UTF-8.\n'> <'\n'> 
          <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> 
          <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> <'\tgit revert HEAD &&\n'> <'\n'> 
          <'\tcheck_encoding 3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'cherry-pick(L/L)'>)} 
      {
        (SQ <'\n'> <'\t# Both the commitencoding and logoutputencoding is set to ISO-8859-1\n'> <'\n'> 
          <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> 
          <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> 
          <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cherry-pick(U/L)'>)} 
      {
        (SQ <'\n'> <'\t# Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1\n'> <'\n'> 
          <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> 
          <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> 
          <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'cherry-pick(L/U)'>)} 
      {
        (SQ <'\n'> <'\t# Again, the commitencoding is set to ISO-8859-1 but\n'> 
          <'\t# logoutputencoding is set to UTF-8.\n'> <'\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> 
          <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> 
          <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rebase --merge (U/U)'>)} 
      {
        (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> 
          <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> 
          <'\tgit rebase --merge master &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rebase --merge (U/L)'>)} 
      {
        (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> 
          <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> 
          <'\tgit rebase --merge master &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rebase --merge (L/L)'>)} 
      {
        (SQ <'\n'> <'\t# In this test we want ISO-8859-1 encoded commits as the result\n'> 
          <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> 
          <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge master &&\n'> <'\n'> 
          <'\tcheck_encoding 2 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rebase --merge (L/U)'>)} 
      {
        (SQ <'\n'> <'\t# This is pathological -- use UTF-8 as intermediate form\n'> 
          <'\t# to get ISO-8859-1 results.\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> 
          <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge master &&\n'> <'\n'> 
          <'\tcheck_encoding 2 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'am (U/U)'>)} 
      {
        (SQ <'\n'> <'\t# Apply UTF-8 patches with UTF-8 commitencoding\n'> 
          <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> 
          <'\tgit am out-u1 out-u2 &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'am (L/L)'>)} 
      {
        (SQ <'\n'> <'\t# Apply ISO-8859-1 patches with ISO-8859-1 commitencoding\n'> 
          <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> 
          <'\tgit am out-l1 out-l2 &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'am (U/L)'>)} 
      {
        (SQ <'\n'> <'\t# Apply ISO-8859-1 patches with UTF-8 commitencoding\n'> 
          <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\tgit reset --hard master &&\n'> <'\n'> 
          <'\t# am specifies --utf8 by default.\n'> <'\tgit am out-l1 out-l2 &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'am --no-utf8 (U/L)'>)} 
      {
        (SQ <'\n'> <'\t# Apply ISO-8859-1 patches with UTF-8 commitencoding\n'> 
          <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> 
          <'\tgit am --no-utf8 out-l1 out-l2 2>err &&\n'> <'\n'> <'\t# commit-tree will warn that the commit message does not contain valid UTF-8\n'> 
          <'\t# as mailinfo did not convert it\n'> <'\ttest_i18ngrep "did not conform" err &&\n'> <'\n'> <'\tcheck_encoding 2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'am (L/U)'>)} 
      {
        (SQ <'\n'> <'\t# Apply UTF-8 patches with ISO-8859-1 commitencoding\n'> 
          <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> 
          <'\t# mailinfo will re-code the commit message to the charset specified by\n'> <'\t# i18n.commitencoding\n'> <'\tgit am out-u1 out-u2 &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)