(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'verbose commit template'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <write_script>
          more_env: []
          words: [{<write_script>} {(DQ <check-for-diff>)}]
          redirects: [
            (Redir
              op: <Id.Redir_DLess '<<'>
              loc: (redir_loc.Fd fd:0)
              arg: 
                (redir_param.HereDoc
                  here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <OF>}
                  here_end_tok: <Id.Undefined_Tok ''>
                  stdin_parts: [<'grep \'^diff --git\' "$1" >out\n'> <'exit 0\n'>]
                )
            )
          ]
          do_fork: T
        )
        (command.Simple
          blame_tok: <test_set_editor>
          more_env: []
          words: [{<test_set_editor>} {(DQ ($ Id.VSub_DollarName PWD) <'/check-for-diff'>)}]
          redirects: []
          do_fork: T
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.Simple
      blame_tok: <cat>
      more_env: []
      words: [{<cat>}]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<message>})
        (Redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_tok: <Id.Undefined_Tok ''>
              stdin_parts: [<'subject\n'> <'\n'> <'body\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <setup>)}
        {
          (SQ <'\n'> <'\techo content >file &&\n'> <'\tgit add file &&\n'> <'\tgit commit -F message\n'>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'initial commit shows verbose diff'>)}
        {(SQ <'\n'> <'\tgit commit --amend -v &&\n'> <'\ttest_line_count = 1 out\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'second commit'>)}
        {
          (SQ <'\n'> <'\techo content modified >file &&\n'> <'\tgit add file &&\n'> 
            <'\tgit commit -F message\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <check_message>
      name: check_message
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<log>}
                    {<-1>}
                    {<--pretty> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <s> 
                      <Id.Lit_Other '%'> <n> <Id.Lit_Other '%'> <n> <Id.Lit_Other '%'> <b>
                    }
                  ]
                  redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<actual>})]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test_cmp>
                  more_env: []
                  words: [{<test_cmp>} {(DQ ($ Id.VSub_Number 1))} {<actual>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verbose diff is stripped out'>)}
        {
          (SQ <'\n'> <'\tgit commit --amend -v &&\n'> <'\tcheck_message message &&\n'> 
            <'\ttest_line_count = 1 out\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verbose diff is stripped out (mnemonicprefix)'>)}
        {
          (SQ <'\n'> <'\tgit config diff.mnemonicprefix true &&\n'> <'\tgit commit --amend -v &&\n'> 
            <'\tcheck_message message &&\n'> <'\ttest_line_count = 1 out\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <cat>
      more_env: []
      words: [{<cat>}]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<diff>})
        (Redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_tok: <Id.Undefined_Tok ''>
              stdin_parts: [
                <'This is an example commit message that contains a diff.\n'>
                <'\n'>
                <'diff --git c/file i/file\n'>
                <'new file mode 100644\n'>
                <'index 0000000..f95c11d\n'>
                <'--- /dev/null\n'>
                <'+++ i/file\n'>
                <'@@ -0,0 +1 @@\n'>
                <'+this is some content\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'diff in message is retained without -v'>)}
        {(SQ <'\n'> <'\tgit commit --amend -F diff &&\n'> <'\tcheck_message diff\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'diff in message is retained with -v'>)}
        {(SQ <'\n'> <'\tgit commit --amend -F diff -v &&\n'> <'\tcheck_message diff\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'submodule log is stripped out too with -v'>)}
        {
          (SQ <'\n'> <'\tgit config diff.submodule log &&\n'> <'\tgit submodule add ./. sub &&\n'> 
            <'\tgit commit -m "sub added" &&\n'> <'\t(\n'> <'\t\tcd sub &&\n'> <'\t\techo "more" >>file &&\n'> 
            <'\t\tgit commit -a -m "submodule commit"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tGIT_EDITOR=cat &&\n'> <'\t\texport GIT_EDITOR &&\n'> 
            <'\t\ttest_must_fail git commit -a -v 2>err\n'> <'\t) &&\n'> <'\ttest_i18ngrep "Aborting commit due to empty commit message." err\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'verbose diff is stripped out with set core.commentChar'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\tGIT_EDITOR=cat &&\n'> <'\t\texport GIT_EDITOR &&\n'> 
            <'\t\ttest_must_fail git -c core.commentchar=";" commit -a -v 2>err\n'> <'\t) &&\n'> <'\ttest_i18ngrep "Aborting commit due to empty commit message." err\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'status does not verbose without --verbose'>)}
        {(SQ <'\n'> <'\tgit status >actual &&\n'> <'\t! grep "^diff --git" actual\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [{<test_expect_success>} {(SQ <'setup -v -v'>)} {(SQ <'\n'> <'\techo dirty >file\n'>)}]
      redirects: []
      do_fork: T
    )
    (command.ForEach
      keyword: <Id.KW_For for>
      iter_names: [i]
      iterable: (for_iter.Words words:[{<true>} {<1>}])
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {(DQ <'commit.verbose='> ($ Id.VSub_DollarName i) <' and --verbose omitted'>)}
                {
                  (DQ <'\n'> <'\t\tgit -c commit.verbose='> ($ Id.VSub_DollarName i) 
                    <' commit --amend &&\n'> <'\t\ttest_line_count = 1 out\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.ForEach
      keyword: <Id.KW_For for>
      iter_names: [i]
      iterable: (for_iter.Words words:[{<false>} {<-2>} {<-1>} {<0>}])
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {(DQ <'commit.verbose='> ($ Id.VSub_DollarName i) <' and --verbose omitted'>)}
                {
                  (DQ <'\n'> <'\t\tgit -c commit.verbose='> ($ Id.VSub_DollarName i) 
                    <' commit --amend &&\n'> <'\t\ttest_line_count = 0 out\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.ForEach
      keyword: <Id.KW_For for>
      iter_names: [i]
      iterable: (for_iter.Words words:[{<2>} {<3>}])
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {(DQ <'commit.verbose='> ($ Id.VSub_DollarName i) <' and --verbose omitted'>)}
                {
                  (DQ <'\n'> <'\t\tgit -c commit.verbose='> ($ Id.VSub_DollarName i) 
                    <' commit --amend &&\n'> <'\t\ttest_line_count = 2 out\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.ForEach
      keyword: <Id.KW_For for>
      iter_names: [i]
      iterable: (for_iter.Words words:[{<true>} {<false>} {<-2>} {<-1>} {<0>} {<1>} {<2>} {<3>}])
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {(DQ <'commit.verbose='> ($ Id.VSub_DollarName i) <' and --verbose'>)}
                {
                  (DQ <'\n'> <'\t\tgit -c commit.verbose='> ($ Id.VSub_DollarName i) 
                    <' commit --amend --verbose &&\n'> <'\t\ttest_line_count = 1 out\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {(DQ <'commit.verbose='> ($ Id.VSub_DollarName i) <' and --no-verbose'>)}
                {
                  (DQ <'\n'> <'\t\tgit -c commit.verbose='> ($ Id.VSub_DollarName i) 
                    <' commit --amend --no-verbose &&\n'> <'\t\ttest_line_count = 0 out\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {(DQ <'commit.verbose='> ($ Id.VSub_DollarName i) <' and -v -v'>)}
                {
                  (DQ <'\n'> <'\t\tgit -c commit.verbose='> ($ Id.VSub_DollarName i) 
                    <' commit --amend -v -v &&\n'> <'\t\ttest_line_count = 2 out\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(DQ <'status ignores commit.verbose=true'>)}
        {
          (SQ <'\n'> <'\tgit -c commit.verbose=true status >actual &&\n'> 
            <'\t! grep "^diff --git actual"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)