Merge branch 'nd/qsort-in-merge-recursive'
[git] / t / t5544-pack-objects-hook.sh
1 #!/bin/sh
2
3 test_description='test custom script in place of pack-objects'
4 . ./test-lib.sh
5
6 test_expect_success 'create some history to fetch' '
7         test_commit one &&
8         test_commit two
9 '
10
11 test_expect_success 'create debugging hook script' '
12         write_script .git/hook <<-\EOF
13                 echo >&2 "hook running"
14                 echo "$*" >hook.args
15                 cat >hook.stdin
16                 "$@" <hook.stdin >hook.stdout
17                 cat hook.stdout
18         EOF
19 '
20
21 clear_hook_results () {
22         rm -rf .git/hook.* dst.git
23 }
24
25 test_expect_success 'hook runs via global config' '
26         clear_hook_results &&
27         test_config_global uploadpack.packObjectsHook ./hook &&
28         git clone --no-local . dst.git 2>stderr &&
29         grep "hook running" stderr
30 '
31
32 test_expect_success 'hook outputs are sane' '
33         # check that we recorded a usable pack
34         git index-pack --stdin <.git/hook.stdout &&
35
36         # check that we recorded args and stdin. We do not check
37         # the full argument list or the exact pack contents, as it would make
38         # the test brittle. So just sanity check that we could replay
39         # the packing procedure.
40         grep "^git" .git/hook.args &&
41         $(cat .git/hook.args) <.git/hook.stdin >replay
42 '
43
44 test_expect_success 'hook runs from -c config' '
45         clear_hook_results &&
46         git clone --no-local \
47           -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \
48           . dst.git 2>stderr &&
49         grep "hook running" stderr
50 '
51
52 test_expect_success 'hook does not run from repo config' '
53         clear_hook_results &&
54         test_config uploadpack.packObjectsHook "./hook" &&
55         git clone --no-local . dst.git 2>stderr &&
56         ! grep "hook running" stderr &&
57         test_path_is_missing .git/hook.args &&
58         test_path_is_missing .git/hook.stdin &&
59         test_path_is_missing .git/hook.stdout
60 '
61
62 test_done