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