(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'test custom script in place of pack-objects'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <'create some history to fetch'>)} 
      {(SQ <'\n'> <'\ttest_commit one &&\n'> <'\ttest_commit two\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'create debugging hook script'>)} 
      {
        (SQ <'\n'> <'\twrite_script .git/hook <<-\\EOF\n'> <'\t\techo >&2 "hook running"\n'> 
          <'\t\techo "$*" >hook.args\n'> <'\t\tcat >hook.stdin\n'> <'\t\t"$@" <hook.stdin >hook.stdout\n'> <'\t\tcat hook.stdout\n'> <'\tEOF\n'>
        )
      }
    )
    (command.ShFunction
      name: clear_hook_results
      body: (BraceGroup children:[(C {<rm>} {<-rf>} {<'.git/hook.'> <Id.Lit_Star '*'>} {<dst.git>})])
    )
    (C {<test_expect_success>} {(SQ <'hook runs via global config'>)} 
      {
        (SQ <'\n'> <'\tclear_hook_results &&\n'> 
          <'\ttest_config_global uploadpack.packObjectsHook ./hook &&\n'> <'\tgit clone --no-local . dst.git 2>stderr &&\n'> <'\tgrep "hook running" stderr\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'hook outputs are sane'>)} 
      {
        (SQ <'\n'> <'\t# check that we recorded a usable pack\n'> 
          <'\tgit index-pack --stdin <.git/hook.stdout &&\n'> <'\n'> <'\t# check that we recorded args and stdin. We do not check\n'> 
          <'\t# the full argument list or the exact pack contents, as it would make\n'> <'\t# the test brittle. So just sanity check that we could replay\n'> <'\t# the packing procedure.\n'> 
          <'\tgrep "^git" .git/hook.args &&\n'> <'\t$(cat .git/hook.args) <.git/hook.stdin >replay\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'hook runs from -c config'>)} 
      {
        (SQ <'\n'> <'\tclear_hook_results &&\n'> <'\tgit clone --no-local \\\n'> 
          <'\t  -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \\\n'> <'\t  . dst.git 2>stderr &&\n'> <'\tgrep "hook running" stderr\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'hook does not run from repo config'>)} 
      {
        (SQ <'\n'> <'\tclear_hook_results &&\n'> 
          <'\ttest_config uploadpack.packObjectsHook "./hook" &&\n'> <'\tgit clone --no-local . dst.git 2>stderr &&\n'> <'\t! grep "hook running" stderr &&\n'> 
          <'\ttest_path_is_missing .git/hook.args &&\n'> <'\ttest_path_is_missing .git/hook.stdin &&\n'> <'\ttest_path_is_missing .git/hook.stdout\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)