]>
Commit | Line | Data |
---|---|---|
20b20a22 JK |
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 |