Merge branch 'dd/upload-pack-stateless-eof'
"git fetch --depth=<n>" over the stateless RPC / smart HTTP transport handled EOF from the client poorly at the server end. * dd/upload-pack-stateless-eof: upload-pack: allow stateless client EOF just prior to haves
This commit is contained in:
commit
d1169be31a
@ -88,6 +88,23 @@ test_expect_success 'upload-pack fails due to error in pack-objects enumeration'
|
|||||||
grep "pack-objects died" output.err
|
grep "pack-objects died" output.err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'upload-pack tolerates EOF just after stateless client wants' '
|
||||||
|
test_commit initial &&
|
||||||
|
head=$(git rev-parse HEAD) &&
|
||||||
|
|
||||||
|
{
|
||||||
|
packetize "want $head" &&
|
||||||
|
packetize "shallow $head" &&
|
||||||
|
packetize "deepen 1" &&
|
||||||
|
printf "0000"
|
||||||
|
} >request &&
|
||||||
|
|
||||||
|
printf "0000" >expect &&
|
||||||
|
|
||||||
|
git upload-pack --stateless-rpc . <request >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'create empty repository' '
|
test_expect_success 'create empty repository' '
|
||||||
|
|
||||||
mkdir foo &&
|
mkdir foo &&
|
||||||
|
@ -1344,7 +1344,18 @@ void upload_pack(struct upload_pack_options *options)
|
|||||||
PACKET_READ_DIE_ON_ERR_PACKET);
|
PACKET_READ_DIE_ON_ERR_PACKET);
|
||||||
|
|
||||||
receive_needs(&data, &reader);
|
receive_needs(&data, &reader);
|
||||||
if (data.want_obj.nr) {
|
|
||||||
|
/*
|
||||||
|
* An EOF at this exact point in negotiation should be
|
||||||
|
* acceptable from stateless clients as they will consume the
|
||||||
|
* shallow list before doing subsequent rpc with haves/etc.
|
||||||
|
*/
|
||||||
|
if (data.stateless_rpc)
|
||||||
|
reader.options |= PACKET_READ_GENTLE_ON_EOF;
|
||||||
|
|
||||||
|
if (data.want_obj.nr &&
|
||||||
|
packet_reader_peek(&reader) != PACKET_READ_EOF) {
|
||||||
|
reader.options &= ~PACKET_READ_GENTLE_ON_EOF;
|
||||||
get_common_commits(&data, &reader);
|
get_common_commits(&data, &reader);
|
||||||
create_pack_file(&data, NULL);
|
create_pack_file(&data, NULL);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user