Raw
1 #!/bin/sh
2
3 test_description='test custom script in place of pack-objects'
4
5 . ./test-lib.sh
6
7 test_expect_success 'create some history to fetch' '
8 test_commit one &&
9 test_commit two
10 '
11
12 test_expect_success 'create debugging hook script' '
13 write_script .git/hook <<-\EOF
14 echo >&2 "hook running"
15 echo "$*" >hook.args
16 cat >hook.stdin
17 "$@" <hook.stdin >hook.stdout
18 cat hook.stdout
19 EOF
20 '
21
22 clear_hook_results () {
23 rm -rf .git/hook.* dst.git
24 }
25
26 test_expect_success 'hook runs via global config' '
27 clear_hook_results &&
28 test_config_global uploadpack.packObjectsHook ./hook &&
29 git clone --no-local . dst.git 2>stderr &&
30 grep "hook running" stderr
31 '
32
33 test_expect_success 'hook outputs are sane' '
34 # check that we recorded a usable pack
35 git index-pack --stdin <.git/hook.stdout &&
36
37 # check that we recorded args and stdin. We do not check
38 # the full argument list or the exact pack contents, as it would make
39 # the test brittle. So just sanity check that we could replay
40 # the packing procedure.
41 grep "^git" .git/hook.args &&
42 $(cat .git/hook.args) <.git/hook.stdin >replay
43 '
44
45 test_expect_success 'hook runs from -c config' '
46 clear_hook_results &&
47 git clone --no-local \
48 -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \
49 . dst.git 2>stderr &&
50 grep "hook running" stderr
51 '
52
53 test_expect_success 'hook does not run from repo config' '
54 clear_hook_results &&
55 test_config uploadpack.packObjectsHook "./hook" &&
56 git clone --no-local . dst.git 2>stderr &&
57 ! grep "hook running" stderr &&
58 test_path_is_missing .git/hook.args &&
59 test_path_is_missing .git/hook.stdin &&
60 test_path_is_missing .git/hook.stdout &&
61
62 # check that global config is used instead
63 test_config_global uploadpack.packObjectsHook ./hook &&
64 git clone --no-local . dst2.git 2>stderr &&
65 grep "hook running" stderr
66 '
67
68 test_expect_success 'hook works with partial clone' '
69 clear_hook_results &&
70 test_config_global uploadpack.packObjectsHook ./hook &&
71 test_config_global uploadpack.allowFilter true &&
72 git clone --bare --no-local --filter=blob:none . dst.git &&
73 git -C dst.git rev-list --objects --missing=allow-any --no-object-names --all >objects &&
74 git -C dst.git cat-file --batch-check="%(objecttype)" <objects >types &&
75 ! grep blob types
76 '
77
78 test_done