| #!/bin/sh | |
| test_description='test custom script in place of pack-objects' | |
| . ./test-lib.sh | |
| test_expect_success 'create some history to fetch' ' | |
| test_commit one && | |
| test_commit two | |
| ' | |
| test_expect_success 'create debugging hook script' ' | |
| write_script .git/hook <<-\EOF | |
| echo >&2 "hook running" | |
| echo "$*" >hook.args | |
| cat >hook.stdin | |
| "$@" <hook.stdin >hook.stdout | |
| cat hook.stdout | |
| EOF | |
| ' | |
| clear_hook_results () { | |
| rm -rf .git/hook.* dst.git | |
| } | |
| test_expect_success 'hook runs via global config' ' | |
| clear_hook_results && | |
| test_config_global uploadpack.packObjectsHook ./hook && | |
| git clone --no-local . dst.git 2>stderr && | |
| test_grep "hook running" stderr | |
| ' | |
| test_expect_success 'hook outputs are sane' ' | |
| # check that we recorded a usable pack | |
| git index-pack --stdin <.git/hook.stdout && | |
| # check that we recorded args and stdin. We do not check | |
| # the full argument list or the exact pack contents, as it would make | |
| # the test brittle. So just sanity check that we could replay | |
| # the packing procedure. | |
| test_grep "^git" .git/hook.args && | |
| $(cat .git/hook.args) <.git/hook.stdin >replay | |
| ' | |
| test_expect_success 'hook runs from -c config' ' | |
| clear_hook_results && | |
| git clone --no-local \ | |
| -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \ | |
| . dst.git 2>stderr && | |
| test_grep "hook running" stderr | |
| ' | |
| test_expect_success 'hook does not run from repo config' ' | |
| clear_hook_results && | |
| test_config uploadpack.packObjectsHook "./hook" && | |
| git clone --no-local . dst.git 2>stderr && | |
| test_grep ! "hook running" stderr && | |
| test_path_is_missing .git/hook.args && | |
| test_path_is_missing .git/hook.stdin && | |
| test_path_is_missing .git/hook.stdout && | |
| # check that global config is used instead | |
| test_config_global uploadpack.packObjectsHook ./hook && | |
| git clone --no-local . dst2.git 2>stderr && | |
| test_grep "hook running" stderr | |
| ' | |
| test_expect_success 'hook works with partial clone' ' | |
| clear_hook_results && | |
| test_config_global uploadpack.packObjectsHook ./hook && | |
| test_config_global uploadpack.allowFilter true && | |
| git clone --bare --no-local --filter=blob:none . dst.git && | |
| git -C dst.git rev-list --objects --missing=allow-any --no-object-names --all >objects && | |
| git -C dst.git cat-file --batch-check="%(objecttype)" <objects >types && | |
| test_grep ! blob types | |
| ' | |
| test_done |