Skip to content

Commit 3ac8703

Browse files
stefanbellergitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f6a4e61 commit 3ac8703

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

t/t5545-push-options.sh

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

0 commit comments

Comments
 (0)