add a test for push options

The functions `mk_repo_pair` as well as `test_refs` are borrowed from t5543-atomic-push, with additional hooks installed. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stefan Beller committed Jul 14, 2016 at 14:49 UTC 3ac870300a7bb430341388a8f2ec465328986617
1 file changed +103
t/t5545-push-options.sh new
+103
@@ -0,0 +1,103 @@
1 +#!/bin/sh
2 +
3 +test_description='pushing to a repository using push options'
4 +
5 +. ./test-lib.sh
6 +
7 +mk_repo_pair () {
8 + rm -rf workbench upstream &&
9 + test_create_repo upstream &&
10 + test_create_repo workbench &&
11 + (
12 + cd upstream &&
13 + git config receive.denyCurrentBranch warn &&
14 + mkdir -p .git/hooks &&
15 + cat >.git/hooks/pre-receive <<-'EOF' &&
16 + #!/bin/sh
17 + if test -n "$GIT_PUSH_OPTION_COUNT"; then
18 + i=0
19 + >hooks/pre-receive.push_options
20 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do
21 + eval "value=\$GIT_PUSH_OPTION_$i"
22 + echo $value >>hooks/pre-receive.push_options
23 + i=$((i + 1))
24 + done
25 + fi
26 + EOF
27 + chmod u+x .git/hooks/pre-receive
28 +
29 + cat >.git/hooks/post-receive <<-'EOF' &&
30 + #!/bin/sh
31 + if test -n "$GIT_PUSH_OPTION_COUNT"; then
32 + i=0
33 + >hooks/post-receive.push_options
34 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do
35 + eval "value=\$GIT_PUSH_OPTION_$i"
36 + echo $value >>hooks/post-receive.push_options
37 + i=$((i + 1))
38 + done
39 + fi
40 + EOF
41 + chmod u+x .git/hooks/post-receive
42 + ) &&
43 + (
44 + cd workbench &&
45 + git remote add up ../upstream
46 + )
47 +}
48 +
49 +# Compare the ref ($1) in upstream with a ref value from workbench ($2)
50 +# i.e. test_refs second HEAD@{2}
51 +test_refs () {
52 + test $# = 2 &&
53 + git -C upstream rev-parse --verify "$1" >expect &&
54 + git -C workbench rev-parse --verify "$2" >actual &&
55 + test_cmp expect actual
56 +}
57 +
58 +test_expect_success 'one push option works for a single branch' '
59 + mk_repo_pair &&
60 + git -C upstream config receive.advertisePushOptions true &&
61 + (
62 + cd workbench &&
63 + test_commit one &&
64 + git push --mirror up &&
65 + test_commit two &&
66 + git push --push-option=asdf up master
67 + ) &&
68 + test_refs master master &&
69 + echo "asdf" >expect &&
70 + test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
71 + test_cmp expect upstream/.git/hooks/post-receive.push_options
72 +'
73 +
74 +test_expect_success 'push option denied by remote' '
75 + mk_repo_pair &&
76 + git -C upstream config receive.advertisePushOptions false &&
77 + (
78 + cd workbench &&
79 + test_commit one &&
80 + git push --mirror up &&
81 + test_commit two &&
82 + test_must_fail git push --push-option=asdf up master
83 + ) &&
84 + test_refs master HEAD@{1}
85 +'
86 +
87 +test_expect_success 'two push options work' '
88 + mk_repo_pair &&
89 + git -C upstream config receive.advertisePushOptions true &&
90 + (
91 + cd workbench &&
92 + test_commit one &&
93 + git push --mirror up &&
94 + test_commit two &&
95 + git push --push-option=asdf --push-option="more structured text" up master
96 + ) &&
97 + test_refs master master &&
98 + printf "asdf\nmore structured text\n" >expect &&
99 + test_cmp expect upstream/.git/hooks/pre-receive.push_options &&
100 + test_cmp expect upstream/.git/hooks/post-receive.push_options
101 +'
102 +
103 +test_done