(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                (Token
                  id: Id.Lit_Chars
                  val: 'Test the core.hooksPath configuration variable'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'set up a pre-commit hook in core.hooksPath' span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token
            id: Id.Lit_Chars
            val: '\tmkdir -p .git/custom-hooks .git/hooks &&\n'
            span_id: 23
          ) (Token id:Id.Lit_Chars val:'\twrite_script .git/custom-hooks/pre-commit <<-\\EOF &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\techo CUSTOM >>actual\n' span_id:25) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:26) 
          (Token
            id: Id.Lit_Chars
            val: '\twrite_script .git/hooks/pre-commit <<-\\EOF\n'
            span_id: 27
          ) (Token id:Id.Lit_Chars val:'\techo NORMAL >>actual\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:29)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Check that various forms of specifying core.hooksPath work'
            span_id: 36
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\ttest_commit no_custom_hook &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit config core.hooksPath .git/custom-hooks &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\ttest_commit have_custom_hook &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\tgit config core.hooksPath .git/custom-hooks/ &&\n' span_id:44) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit have_custom_hook_trailing_slash &&\n'
            span_id: 45
          ) (Token id:Id.Lit_Chars val:'\tgit config core.hooksPath "$PWD/.git/custom-hooks" &&\n' span_id:46) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit have_custom_hook_abs_path &&\n'
            span_id: 47
          ) (Token id:Id.Lit_Chars val:'\tgit config core.hooksPath "$PWD/.git/custom-hooks/" &&\n' span_id:48) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit have_custom_hook_abs_path_trailing_slash &&\n'
            span_id: 49
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\tNORMAL\n' span_id:51) (Token id:Id.Lit_Chars val:'\tCUSTOM\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tCUSTOM\n' span_id:53) (Token id:Id.Lit_Chars val:'\tCUSTOM\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\tCUSTOM\n' span_id:55) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:57)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git rev-parse --git-path hooks' span_id:64))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.hooksPath .git/custom-hooks &&\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --git-path hooks/abc >actual &&\n' span_id:70) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest .git/custom-hooks/abc = "$(cat actual)"\n'
            span_id: 71
          )
        )
      }
    )
    (C {(test_done)})
  ]
)