1 test_expect_success
"setup proc-receive hook (option without matching ok, $PROTOCOL/porcelain)" '
2 write_script "$upstream/hooks/proc-receive" <<-EOF
3 printf >&2 "# proc-receive hook\n"
4 test-tool proc-receive -v \
5 -r "option refname refs/pull/123/head" \
10 # Refs of upstream : main(A)
11 # Refs of workbench: main(A) tags/v123
12 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
13 test_expect_success
"proc-receive: report option without matching ok ($PROTOCOL/porcelain)" '
14 test_must_fail git -C workbench push --porcelain origin \
15 HEAD:refs/for/main/topic \
16 >out-$test_count 2>&1 &&
17 make_user_friendly_and_stable_output <out-$test_count >actual &&
18 format_and_save_expect <<-EOF &&
19 > remote: # pre-receive hook Z
20 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
21 > remote: # proc-receive hook Z
22 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
23 > remote: proc-receive> option refname refs/pull/123/head Z
24 > remote: proc-receive> option old-oid <COMMIT-B> Z
25 > remote: error: proc-receive reported "option" without a matching "ok/ng" directive Z
26 > To <URL/of/upstream.git>
27 > ! HEAD:refs/for/main/topic [remote rejected] (proc-receive failed to report status)
30 test_cmp expect actual
33 test_expect_success
"setup proc-receive hook (option refname, $PROTOCOL/porcelain)" '
34 write_script "$upstream/hooks/proc-receive" <<-EOF
35 printf >&2 "# proc-receive hook\n"
36 test-tool proc-receive -v \
37 -r "ok refs/for/main/topic" \
38 -r "option refname refs/pull/123/head"
42 # Refs of upstream : main(A)
43 # Refs of workbench: main(A) tags/v123
44 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
45 test_expect_success
"proc-receive: report option refname ($PROTOCOL/porcelain)" '
46 git -C workbench push --porcelain origin \
47 HEAD:refs/for/main/topic \
49 make_user_friendly_and_stable_output <out >actual &&
50 format_and_save_expect <<-EOF &&
51 > remote: # pre-receive hook Z
52 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
53 > remote: # proc-receive hook Z
54 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
55 > remote: proc-receive> ok refs/for/main/topic Z
56 > remote: proc-receive> option refname refs/pull/123/head Z
57 > remote: # post-receive hook Z
58 > remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head Z
59 > To <URL/of/upstream.git>
60 > * HEAD:refs/pull/123/head [new reference]
63 test_cmp expect actual
66 test_expect_success
"setup proc-receive hook (option refname and forced-update, $PROTOCOL/porcelain)" '
67 write_script "$upstream/hooks/proc-receive" <<-EOF
68 printf >&2 "# proc-receive hook\n"
69 test-tool proc-receive -v \
70 -r "ok refs/for/main/topic" \
71 -r "option refname refs/pull/123/head" \
72 -r "option forced-update"
76 # Refs of upstream : main(A)
77 # Refs of workbench: main(A) tags/v123
78 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
79 test_expect_success
"proc-receive: report option refname and forced-update ($PROTOCOL/porcelain)" '
80 git -C workbench push --porcelain origin \
81 HEAD:refs/for/main/topic \
83 make_user_friendly_and_stable_output <out >actual &&
84 format_and_save_expect <<-EOF &&
85 > remote: # pre-receive hook Z
86 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
87 > remote: # proc-receive hook Z
88 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
89 > remote: proc-receive> ok refs/for/main/topic Z
90 > remote: proc-receive> option refname refs/pull/123/head Z
91 > remote: proc-receive> option forced-update Z
92 > remote: # post-receive hook Z
93 > remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head Z
94 > To <URL/of/upstream.git>
95 > * HEAD:refs/pull/123/head [new reference]
98 test_cmp expect actual
101 test_expect_success
"setup proc-receive hook (option refname and old-oid, $PROTOCOL/porcelain)" '
102 write_script "$upstream/hooks/proc-receive" <<-EOF
103 printf >&2 "# proc-receive hook\n"
104 test-tool proc-receive -v \
105 -r "ok refs/for/main/topic" \
106 -r "option refname refs/pull/123/head" \
107 -r "option old-oid $B"
111 # Refs of upstream : main(A)
112 # Refs of workbench: main(A) tags/v123
113 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
114 test_expect_success
"proc-receive: report option refname and old-oid ($PROTOCOL/porcelain)" '
115 git -C workbench push --porcelain origin \
116 HEAD:refs/for/main/topic \
118 make_user_friendly_and_stable_output <out >actual &&
119 format_and_save_expect <<-EOF &&
120 > remote: # pre-receive hook Z
121 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
122 > remote: # proc-receive hook Z
123 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
124 > remote: proc-receive> ok refs/for/main/topic Z
125 > remote: proc-receive> option refname refs/pull/123/head Z
126 > remote: proc-receive> option old-oid <COMMIT-B> Z
127 > remote: # post-receive hook Z
128 > remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head Z
129 > To <URL/of/upstream.git>
130 > HEAD:refs/pull/123/head <COMMIT-B>..<COMMIT-A>
133 test_cmp expect actual
136 test_expect_success
"setup proc-receive hook (option old-oid, $PROTOCOL/porcelain)" '
137 write_script "$upstream/hooks/proc-receive" <<-EOF
138 printf >&2 "# proc-receive hook\n"
139 test-tool proc-receive -v \
140 -r "ok refs/for/main/topic" \
141 -r "option old-oid $B"
145 # Refs of upstream : main(A)
146 # Refs of workbench: main(A) tags/v123
147 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
148 test_expect_success
"proc-receive: report option old-oid ($PROTOCOL/porcelain)" '
149 git -C workbench push --porcelain origin \
150 HEAD:refs/for/main/topic \
152 make_user_friendly_and_stable_output <out >actual &&
153 format_and_save_expect <<-EOF &&
154 > remote: # pre-receive hook Z
155 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
156 > remote: # proc-receive hook Z
157 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
158 > remote: proc-receive> ok refs/for/main/topic Z
159 > remote: proc-receive> option old-oid <COMMIT-B> Z
160 > remote: # post-receive hook Z
161 > remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic Z
162 > To <URL/of/upstream.git>
163 > HEAD:refs/for/main/topic <COMMIT-B>..<COMMIT-A>
166 test_cmp expect actual
169 test_expect_success
"setup proc-receive hook (option old-oid and new-oid, $PROTOCOL/porcelain)" '
170 write_script "$upstream/hooks/proc-receive" <<-EOF
171 printf >&2 "# proc-receive hook\n"
172 test-tool proc-receive -v \
173 -r "ok refs/for/main/topic" \
174 -r "option old-oid $A" \
175 -r "option new-oid $B"
179 # Refs of upstream : main(A)
180 # Refs of workbench: main(A) tags/v123
181 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
182 test_expect_success
"proc-receive: report option old-oid and new-oid ($PROTOCOL/porcelain)" '
183 git -C workbench push --porcelain origin \
184 HEAD:refs/for/main/topic \
186 make_user_friendly_and_stable_output <out >actual &&
187 format_and_save_expect <<-EOF &&
188 > remote: # pre-receive hook Z
189 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
190 > remote: # proc-receive hook Z
191 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
192 > remote: proc-receive> ok refs/for/main/topic Z
193 > remote: proc-receive> option old-oid <COMMIT-A> Z
194 > remote: proc-receive> option new-oid <COMMIT-B> Z
195 > remote: # post-receive hook Z
196 > remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic Z
197 > To <URL/of/upstream.git>
198 > HEAD:refs/for/main/topic <COMMIT-A>..<COMMIT-B>
201 test_cmp expect actual
204 test_expect_success
"setup proc-receive hook (report with multiple rewrites, $PROTOCOL/porcelain)" '
205 write_script "$upstream/hooks/proc-receive" <<-EOF
206 printf >&2 "# proc-receive hook\n"
207 test-tool proc-receive -v \
208 -r "ok refs/for/a/b/c/topic" \
209 -r "ok refs/for/next/topic" \
210 -r "option refname refs/pull/123/head" \
211 -r "ok refs/for/main/topic" \
212 -r "option refname refs/pull/124/head" \
213 -r "option old-oid $B" \
214 -r "option forced-update" \
215 -r "option new-oid $A"
220 # Refs of upstream : main(A)
221 # Refs of workbench: main(A) tags/v123
222 # git push : refs/for/next/topic(A) refs/for/a/b/c/topic(A) refs/for/main/topic(A)
223 test_expect_success
"proc-receive: report with multiple rewrites ($PROTOCOL/porcelain)" '
224 git -C workbench push --porcelain origin \
225 HEAD:refs/for/next/topic \
226 HEAD:refs/for/a/b/c/topic \
227 HEAD:refs/for/main/topic \
229 make_user_friendly_and_stable_output <out >actual &&
230 format_and_save_expect <<-EOF &&
231 > remote: # pre-receive hook Z
232 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic Z
233 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic Z
234 > remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
235 > remote: # proc-receive hook Z
236 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic Z
237 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic Z
238 > remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic Z
239 > remote: proc-receive> ok refs/for/a/b/c/topic Z
240 > remote: proc-receive> ok refs/for/next/topic Z
241 > remote: proc-receive> option refname refs/pull/123/head Z
242 > remote: proc-receive> ok refs/for/main/topic Z
243 > remote: proc-receive> option refname refs/pull/124/head Z
244 > remote: proc-receive> option old-oid <COMMIT-B> Z
245 > remote: proc-receive> option forced-update Z
246 > remote: proc-receive> option new-oid <COMMIT-A> Z
247 > remote: # post-receive hook Z
248 > remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head Z
249 > remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic Z
250 > remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head Z
251 > To <URL/of/upstream.git>
252 > * HEAD:refs/pull/123/head [new reference]
253 > * HEAD:refs/for/a/b/c/topic [new reference]
254 > + HEAD:refs/pull/124/head <COMMIT-B>...<COMMIT-A> (forced update)
257 test_cmp expect actual &&
259 test_cmp_refs -C "$upstream" <<-EOF
260 <COMMIT-A> refs/heads/main