(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'test custom script in place of pack-objects'>)}
          spids: [4]
        )
      ]
      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'>
        )
      }
    )
    (FuncDef
      name: clear_hook_results
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-rf)} {(.git/hook.) (Lit_Other '*')} {(dst.git)})]
          spids: [50]
        )
      spids: [45 49]
    )
    (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)})
  ]
)