3 test_description
='test custom script in place of pack-objects'
5 TEST_PASSES_SANITIZE_LEAK
=true
8 test_expect_success
'create some history to fetch' '
13 test_expect_success
'create debugging hook script' '
14 write_script .git/hook <<-\EOF
15 echo >&2 "hook running"
18 "$@" <hook.stdin >hook.stdout
23 clear_hook_results
() {
24 rm -rf .git
/hook.
* dst.git
27 test_expect_success
'hook runs via global config' '
29 test_config_global uploadpack.packObjectsHook ./hook &&
30 git clone --no-local . dst.git 2>stderr &&
31 grep "hook running" stderr
34 test_expect_success
'hook outputs are sane' '
35 # check that we recorded a usable pack
36 git index-pack --stdin <.git/hook.stdout &&
38 # check that we recorded args and stdin. We do not check
39 # the full argument list or the exact pack contents, as it would make
40 # the test brittle. So just sanity check that we could replay
41 # the packing procedure.
42 grep "^git" .git/hook.args &&
43 $(cat .git/hook.args) <.git/hook.stdin >replay
46 test_expect_success
'hook runs from -c config' '
48 git clone --no-local \
49 -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \
51 grep "hook running" stderr
54 test_expect_success
'hook does not run from repo config' '
56 test_config uploadpack.packObjectsHook "./hook" &&
57 git clone --no-local . dst.git 2>stderr &&
58 ! grep "hook running" stderr &&
59 test_path_is_missing .git/hook.args &&
60 test_path_is_missing .git/hook.stdin &&
61 test_path_is_missing .git/hook.stdout &&
63 # check that global config is used instead
64 test_config_global uploadpack.packObjectsHook ./hook &&
65 git clone --no-local . dst2.git 2>stderr &&
66 grep "hook running" stderr
69 test_expect_success
'hook works with partial clone' '
71 test_config_global uploadpack.packObjectsHook ./hook &&
72 test_config_global uploadpack.allowFilter true &&
73 git clone --bare --no-local --filter=blob:none . dst.git &&
74 git -C dst.git rev-list --objects --missing=allow-any --no-object-names --all >objects &&
75 git -C dst.git cat-file --batch-check="%(objecttype)" <objects >types &&