]>
Commit | Line | Data |
---|---|---|
15d3af5e JX |
1 | test_expect_success "setup proc-receive hook (unknown version, $PROTOCOL/porcelain)" ' |
2 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
3 | printf >&2 "# proc-receive hook\n" | |
4 | test-tool proc-receive -v --version 2 | |
5 | EOF | |
6 | ' | |
7 | ||
a9568dba JS |
8 | # Refs of upstream : main(A) |
9 | # Refs of workbench: main(A) tags/v123 | |
10 | # git push : refs/for/main/topic(A) | |
15d3af5e JX |
11 | test_expect_success "proc-receive: bad protocol (unknown version, $PROTOCOL/porcelain)" ' |
12 | test_must_fail git -C workbench push --porcelain origin \ | |
a9568dba | 13 | HEAD:refs/for/main/topic \ |
15d3af5e JX |
14 | >out 2>&1 && |
15 | make_user_friendly_and_stable_output <out >actual && | |
16 | ||
17 | # Check status report for git-push | |
18 | sed -n \ | |
19 | -e "/^To / { p; n; p; n; p; }" \ | |
20 | <actual >actual-report && | |
21 | cat >expect <<-EOF && | |
22 | To <URL/of/upstream.git> | |
a9568dba | 23 | ! HEAD:refs/for/main/topic [remote rejected] (fail to run proc-receive hook) |
15d3af5e JX |
24 | Done |
25 | EOF | |
26 | test_cmp expect actual-report && | |
27 | ||
28 | # Check error message from "receive-pack", but ignore unstable fatal error | |
29 | # message ("remote: fatal: the remote end hung up unexpectedly") which | |
30 | # is different from the remote HTTP server with different locale settings. | |
31 | grep "^remote: error:" <actual >actual-error && | |
32 | cat >expect <<-EOF && | |
33 | remote: error: proc-receive version "2" is not supported | |
34 | EOF | |
35 | test_cmp expect actual-error && | |
36 | ||
37 | git -C "$upstream" show-ref >out && | |
38 | make_user_friendly_and_stable_output <out >actual && | |
39 | cat >expect <<-EOF && | |
a9568dba | 40 | <COMMIT-A> refs/heads/main |
15d3af5e JX |
41 | EOF |
42 | test_cmp expect actual | |
43 | ' | |
44 | ||
f65003b4 JX |
45 | test_expect_success "setup proc-receive hook (hook --die-read-version, $PROTOCOL/porcelain)" ' |
46 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
47 | printf >&2 "# proc-receive hook\n" | |
48 | test-tool proc-receive -v --die-read-version | |
49 | EOF | |
50 | ' | |
51 | ||
52 | # Refs of upstream : main(A) | |
53 | # Refs of workbench: main(A) tags/v123 | |
54 | # git push : refs/for/main/topic(A) | |
55 | test_expect_success "proc-receive: bad protocol (hook --die-read-version, $PROTOCOL/porcelain)" ' | |
56 | test_must_fail git -C workbench push --porcelain origin \ | |
57 | HEAD:refs/for/main/topic \ | |
58 | >out 2>&1 && | |
59 | filter_out_user_friendly_and_stable_output \ | |
60 | -e "/^To / { p; n; p; n; p; }" \ | |
61 | <out >actual && | |
62 | cat >expect <<-EOF && | |
63 | To <URL/of/upstream.git> | |
64 | ! HEAD:refs/for/main/topic [remote rejected] (fail to run proc-receive hook) | |
65 | Done | |
66 | EOF | |
67 | test_cmp expect actual && | |
68 | grep "remote: fatal: die with the --die-read-version option" out && | |
69 | grep "remote: error: fail to negotiate version with proc-receive hook" out && | |
70 | ||
71 | git -C "$upstream" show-ref >out && | |
72 | make_user_friendly_and_stable_output <out >actual && | |
73 | cat >expect <<-EOF && | |
74 | <COMMIT-A> refs/heads/main | |
75 | EOF | |
76 | test_cmp expect actual | |
77 | ' | |
78 | ||
79 | test_expect_success "setup proc-receive hook (hook --die-write-version, $PROTOCOL/porcelain)" ' | |
80 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
81 | printf >&2 "# proc-receive hook\n" | |
82 | test-tool proc-receive -v --die-write-version | |
83 | EOF | |
84 | ' | |
85 | ||
86 | # Refs of upstream : main(A) | |
87 | # Refs of workbench: main(A) tags/v123 | |
88 | # git push : refs/for/main/topic(A) | |
89 | test_expect_success "proc-receive: bad protocol (hook --die-write-version, $PROTOCOL/porcelain)" ' | |
90 | test_must_fail git -C workbench push --porcelain origin \ | |
91 | HEAD:refs/for/main/topic \ | |
92 | >out 2>&1 && | |
93 | filter_out_user_friendly_and_stable_output \ | |
94 | -e "/^To / { p; n; p; n; p; }" \ | |
95 | <out >actual && | |
96 | cat >expect <<-EOF && | |
97 | To <URL/of/upstream.git> | |
98 | ! HEAD:refs/for/main/topic [remote rejected] (fail to run proc-receive hook) | |
99 | Done | |
100 | EOF | |
101 | test_cmp expect actual && | |
102 | grep "remote: fatal: die with the --die-write-version option" out && | |
103 | grep "remote: error: fail to negotiate version with proc-receive hook" out && | |
104 | ||
105 | git -C "$upstream" show-ref >out && | |
106 | make_user_friendly_and_stable_output <out >actual && | |
107 | cat >expect <<-EOF && | |
108 | <COMMIT-A> refs/heads/main | |
109 | EOF | |
110 | test_cmp expect actual | |
111 | ' | |
112 | ||
113 | test_expect_success "setup proc-receive hook (hook --die-read-commands, $PROTOCOL/porcelain)" ' | |
114 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
115 | printf >&2 "# proc-receive hook\n" | |
116 | test-tool proc-receive -v --die-read-commands | |
117 | EOF | |
118 | ' | |
119 | ||
120 | # Refs of upstream : main(A) | |
121 | # Refs of workbench: main(A) tags/v123 | |
122 | # git push : refs/for/main/topic(A) | |
123 | test_expect_success "proc-receive: bad protocol (hook --die-read-commands, $PROTOCOL/porcelain)" ' | |
124 | test_must_fail git -C workbench push --porcelain origin \ | |
125 | HEAD:refs/for/main/topic \ | |
126 | >out 2>&1 && | |
127 | filter_out_user_friendly_and_stable_output \ | |
128 | -e "/^To / { p; n; p; n; p; }" \ | |
129 | <out >actual && | |
130 | cat >expect <<-EOF && | |
131 | To <URL/of/upstream.git> | |
132 | ! HEAD:refs/for/main/topic [remote rejected] (fail to run proc-receive hook) | |
133 | Done | |
134 | EOF | |
135 | test_cmp expect actual && | |
136 | grep "remote: fatal: die with the --die-read-commands option" out && | |
137 | ||
138 | git -C "$upstream" show-ref >out && | |
139 | make_user_friendly_and_stable_output <out >actual && | |
140 | cat >expect <<-EOF && | |
141 | <COMMIT-A> refs/heads/main | |
142 | EOF | |
143 | test_cmp expect actual | |
144 | ' | |
145 | ||
146 | test_expect_success "setup proc-receive hook (hook --die-read-push-options, $PROTOCOL/porcelain)" ' | |
147 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
148 | printf >&2 "# proc-receive hook\n" | |
149 | test-tool proc-receive -v --die-read-push-options | |
150 | EOF | |
151 | ' | |
152 | ||
153 | # Refs of upstream : main(A) | |
154 | # Refs of workbench: main(A) tags/v123 | |
155 | # git push : refs/for/main/topic(A) | |
156 | test_expect_success "proc-receive: bad protocol (hook --die-read-push-options, $PROTOCOL/porcelain)" ' | |
157 | git -C "$upstream" config receive.advertisePushOptions true && | |
158 | test_must_fail git -C workbench push --porcelain origin \ | |
159 | -o reviewers=user1,user2 \ | |
160 | HEAD:refs/for/main/topic \ | |
161 | >out 2>&1 && | |
162 | filter_out_user_friendly_and_stable_output \ | |
163 | -e "/^To / { p; n; p; n; p; }" \ | |
164 | <out >actual && | |
165 | cat >expect <<-EOF && | |
166 | To <URL/of/upstream.git> | |
167 | ! HEAD:refs/for/main/topic [remote rejected] (fail to run proc-receive hook) | |
168 | Done | |
169 | EOF | |
170 | test_cmp expect actual && | |
171 | grep "remote: fatal: die with the --die-read-push-options option" out && | |
172 | ||
173 | git -C "$upstream" show-ref >out && | |
174 | make_user_friendly_and_stable_output <out >actual && | |
175 | cat >expect <<-EOF && | |
176 | <COMMIT-A> refs/heads/main | |
177 | EOF | |
178 | test_cmp expect actual | |
179 | ' | |
180 | ||
181 | test_expect_success "setup proc-receive hook (hook --die-write-report, $PROTOCOL/porcelain)" ' | |
182 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
183 | printf >&2 "# proc-receive hook\n" | |
184 | test-tool proc-receive -v --die-write-report | |
185 | EOF | |
186 | ' | |
187 | ||
188 | # Refs of upstream : main(A) | |
189 | # Refs of workbench: main(A) tags/v123 | |
190 | # git push : refs/for/main/topic(A) | |
191 | test_expect_success "proc-receive: bad protocol (hook --die-write-report, $PROTOCOL/porcelain)" ' | |
192 | test_must_fail git -C workbench push --porcelain origin \ | |
193 | HEAD:refs/for/main/topic \ | |
194 | >out 2>&1 && | |
195 | filter_out_user_friendly_and_stable_output \ | |
196 | -e "/^To / { p; n; p; n; p; }" \ | |
197 | <out >actual && | |
198 | cat >expect <<-EOF && | |
199 | To <URL/of/upstream.git> | |
200 | ! HEAD:refs/for/main/topic [remote rejected] (fail to run proc-receive hook) | |
201 | Done | |
202 | EOF | |
203 | test_cmp expect actual && | |
204 | grep "remote: fatal: die with the --die-write-report option" out && | |
205 | ||
206 | git -C "$upstream" show-ref >out && | |
207 | make_user_friendly_and_stable_output <out >actual && | |
208 | cat >expect <<-EOF && | |
209 | <COMMIT-A> refs/heads/main | |
210 | EOF | |
211 | test_cmp expect actual | |
212 | ' | |
213 | ||
15d3af5e JX |
214 | test_expect_success "setup proc-receive hook (no report, $PROTOCOL/porcelain)" ' |
215 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
216 | printf >&2 "# proc-receive hook\n" | |
217 | test-tool proc-receive -v | |
218 | EOF | |
219 | ' | |
220 | ||
a9568dba JS |
221 | # Refs of upstream : main(A) |
222 | # Refs of workbench: main(A) tags/v123 | |
223 | # git push : next(A) refs/for/main/topic(A) | |
15d3af5e JX |
224 | test_expect_success "proc-receive: bad protocol (no report, $PROTOCOL/porcelain)" ' |
225 | test_must_fail git -C workbench push --porcelain origin \ | |
226 | HEAD:refs/heads/next \ | |
a9568dba | 227 | HEAD:refs/for/main/topic >out 2>&1 && |
15d3af5e JX |
228 | make_user_friendly_and_stable_output <out >actual && |
229 | cat >expect <<-EOF && | |
230 | remote: # pre-receive hook | |
231 | remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next | |
a9568dba | 232 | remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic |
15d3af5e | 233 | remote: # proc-receive hook |
a9568dba | 234 | remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic |
15d3af5e JX |
235 | remote: # post-receive hook |
236 | remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next | |
237 | To <URL/of/upstream.git> | |
238 | * HEAD:refs/heads/next [new branch] | |
a9568dba | 239 | ! HEAD:refs/for/main/topic [remote rejected] (proc-receive failed to report status) |
15d3af5e JX |
240 | Done |
241 | EOF | |
242 | test_cmp expect actual && | |
f65003b4 | 243 | |
15d3af5e JX |
244 | git -C "$upstream" show-ref >out && |
245 | make_user_friendly_and_stable_output <out >actual && | |
246 | cat >expect <<-EOF && | |
a9568dba | 247 | <COMMIT-A> refs/heads/main |
15d3af5e JX |
248 | <COMMIT-A> refs/heads/next |
249 | EOF | |
250 | test_cmp expect actual | |
251 | ' | |
252 | ||
a9568dba JS |
253 | # Refs of upstream : main(A) next(A) |
254 | # Refs of workbench: main(A) tags/v123 | |
15d3af5e JX |
255 | test_expect_success "cleanup ($PROTOCOL/porcelain)" ' |
256 | git -C "$upstream" update-ref -d refs/heads/next | |
15d3af5e JX |
257 | ' |
258 | ||
259 | test_expect_success "setup proc-receive hook (no ref, $PROTOCOL/porcelain)" ' | |
260 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
261 | printf >&2 "# proc-receive hook\n" | |
262 | test-tool proc-receive -v \ | |
263 | -r "ok" | |
264 | EOF | |
265 | ' | |
266 | ||
a9568dba JS |
267 | # Refs of upstream : main(A) |
268 | # Refs of workbench: main(A) tags/v123 | |
269 | # git push : refs/for/main/topic | |
15d3af5e JX |
270 | test_expect_success "proc-receive: bad protocol (no ref, $PROTOCOL/porcelain)" ' |
271 | test_must_fail git -C workbench push --porcelain origin \ | |
a9568dba | 272 | HEAD:refs/for/main/topic\ |
15d3af5e JX |
273 | >out 2>&1 && |
274 | make_user_friendly_and_stable_output <out >actual && | |
275 | cat >expect <<-EOF && | |
276 | remote: # pre-receive hook | |
a9568dba | 277 | remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic |
15d3af5e | 278 | remote: # proc-receive hook |
a9568dba | 279 | remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic |
15d3af5e JX |
280 | remote: proc-receive> ok |
281 | remote: error: proc-receive reported incomplete status line: "ok" | |
282 | To <URL/of/upstream.git> | |
a9568dba | 283 | ! HEAD:refs/for/main/topic [remote rejected] (proc-receive failed to report status) |
15d3af5e JX |
284 | Done |
285 | EOF | |
286 | test_cmp expect actual && | |
f65003b4 | 287 | |
15d3af5e JX |
288 | git -C "$upstream" show-ref >out && |
289 | make_user_friendly_and_stable_output <out >actual && | |
290 | cat >expect <<-EOF && | |
a9568dba | 291 | <COMMIT-A> refs/heads/main |
15d3af5e JX |
292 | EOF |
293 | test_cmp expect actual | |
294 | ' | |
295 | ||
296 | test_expect_success "setup proc-receive hook (unknown status, $PROTOCOL/porcelain)" ' | |
297 | write_script "$upstream/hooks/proc-receive" <<-EOF | |
298 | printf >&2 "# proc-receive hook\n" | |
299 | test-tool proc-receive -v \ | |
a9568dba | 300 | -r "xx refs/for/main/topic" |
15d3af5e JX |
301 | EOF |
302 | ' | |
303 | ||
a9568dba JS |
304 | # Refs of upstream : main(A) |
305 | # Refs of workbench: main(A) tags/v123 | |
306 | # git push : refs/for/main/topic | |
15d3af5e JX |
307 | test_expect_success "proc-receive: bad protocol (unknown status, $PROTOCOL/porcelain)" ' |
308 | test_must_fail git -C workbench push --porcelain origin \ | |
a9568dba | 309 | HEAD:refs/for/main/topic \ |
15d3af5e JX |
310 | >out 2>&1 && |
311 | make_user_friendly_and_stable_output <out >actual && | |
312 | cat >expect <<-EOF && | |
313 | remote: # pre-receive hook | |
a9568dba | 314 | remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic |
15d3af5e | 315 | remote: # proc-receive hook |
a9568dba JS |
316 | remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic |
317 | remote: proc-receive> xx refs/for/main/topic | |
318 | remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic" | |
15d3af5e | 319 | To <URL/of/upstream.git> |
a9568dba | 320 | ! HEAD:refs/for/main/topic [remote rejected] (proc-receive failed to report status) |
15d3af5e JX |
321 | Done |
322 | EOF | |
323 | test_cmp expect actual && | |
f65003b4 | 324 | |
15d3af5e JX |
325 | git -C "$upstream" show-ref >out && |
326 | make_user_friendly_and_stable_output <out >actual && | |
327 | cat >expect <<-EOF && | |
a9568dba | 328 | <COMMIT-A> refs/heads/main |
15d3af5e JX |
329 | EOF |
330 | test_cmp expect actual | |
331 | ' |