(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 custom script in place of pack-objects' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create some history to fetch' span_id:17))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) (Token id:Id.Lit_Chars val:'\ttest_commit one &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\ttest_commit two\n' span_id:23) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create debugging hook script' span_id:30))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) (Token id:Id.Lit_Chars val:'\twrite_script .git/hook <<-\\EOF\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\techo >&2 "hook running"\n' span_id:36) (Token id:Id.Lit_Chars val:'\t\techo "$*" >hook.args\n' span_id:37) (Token id:Id.Lit_Chars val:'\t\tcat >hook.stdin\n' span_id:38) (Token id:Id.Lit_Chars val:'\t\t"$@" <hook.stdin >hook.stdout\n' span_id:39) (Token id:Id.Lit_Chars val:'\t\tcat hook.stdout\n' span_id:40) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:41) ) } ) (command.ShFunction name: clear_hook_results body: (command.BraceGroup children: [(C {(rm)} {(-rf)} {(.git/hook.) (Id.Lit_Star '*')} {(dst.git)})] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'hook runs via global config' span_id:68))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) (Token id:Id.Lit_Chars val:'\tclear_hook_results &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\ttest_config_global uploadpack.packObjectsHook ./hook &&\n' span_id:74) (Token id: Id.Lit_Chars val: '\tgit clone --no-local . dst.git 2>stderr &&\n' span_id: 75 ) (Token id:Id.Lit_Chars val:'\tgrep "hook running" stderr\n' span_id:76) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'hook outputs are sane' span_id:83))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id: Id.Lit_Chars val: '\t# check that we recorded a usable pack\n' span_id: 88 ) (Token id:Id.Lit_Chars val:'\tgit index-pack --stdin <.git/hook.stdout &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\n' span_id:90) (Token id:Id.Lit_Chars val:'\t# check that we recorded args and stdin. We do not check\n' span_id:91) (Token id: Id.Lit_Chars val: '\t# the full argument list or the exact pack contents, as it would make\n' span_id: 92 ) (Token id: Id.Lit_Chars val: '\t# the test brittle. So just sanity check that we could replay\n' span_id: 93 ) (Token id:Id.Lit_Chars val:'\t# the packing procedure.\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgrep "^git" .git/hook.args &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t$(cat .git/hook.args) <.git/hook.stdin >replay\n' span_id:96) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'hook runs from -c config' span_id:103))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:107) (Token id:Id.Lit_Chars val:'\tclear_hook_results &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\tgit clone --no-local \\\n' span_id:109) (Token id: Id.Lit_Chars val: '\t -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \\\n' span_id: 110 ) (Token id:Id.Lit_Chars val:'\t . dst.git 2>stderr &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgrep "hook running" stderr\n' span_id:112) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'hook does not run from repo config' span_id:119))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id:Id.Lit_Chars val:'\tclear_hook_results &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest_config uploadpack.packObjectsHook "./hook" &&\n' span_id:125) (Token id: Id.Lit_Chars val: '\tgit clone --no-local . dst.git 2>stderr &&\n' span_id: 126 ) (Token id:Id.Lit_Chars val:'\t! grep "hook running" stderr &&\n' span_id:127) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing .git/hook.args &&\n' span_id: 128 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/hook.stdin &&\n' span_id:129) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing .git/hook.stdout\n' span_id: 130 ) ) } ) (C {(test_done)}) ] )