]> git.ipfire.org Git - thirdparty/git.git/commit
remote-curl: use post_rpc() for protocol v2 also
authorJonathan Tan <jonathantanmy@google.com>
Thu, 21 Feb 2019 20:24:41 +0000 (12:24 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sun, 3 Mar 2019 10:00:42 +0000 (19:00 +0900)
commita97d00799a19d2516ca8fae4da9bf782ca6f2e37
tree371a0b56606ac5dbf4e3a4c06f5f8d4bb3625ccd
parent78ad91728d859a3ddb6e86218e86f16cd3489d0a
remote-curl: use post_rpc() for protocol v2 also

When transmitting and receiving POSTs for protocol v0 and v1,
remote-curl uses post_rpc() (and associated functions), but when doing
the same for protocol v2, it uses a separate set of functions
(proxy_rpc() and others). Besides duplication of code, this has caused
at least one bug: the auth retry mechanism that was implemented in v0/v1
was not implemented in v2.

To fix this issue and avoid it in the future, make remote-curl also use
post_rpc() when handling protocol v2. Because line lengths are written
to the HTTP request in protocol v2 (unlike in protocol v0/v1), this
necessitates changes in post_rpc() and some of the functions it uses;
perform these changes too.

A test has been included to ensure that the code for both the unchunked
and chunked variants of the HTTP request is exercised.

Note: stateless_connect() has been updated to use the lower-level packet
reading functions instead of struct packet_reader. The low-level control
is necessary here because we cannot change the destination buffer of
struct packet_reader while it is being used; struct packet_buffer has a
peeking mechanism which relies on the destination buffer being present
in between a peek and a read.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pkt-line.c
pkt-line.h
remote-curl.c
t/t5702-protocol-v2.sh