diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-03-09 03:04:47 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-03-09 03:04:47 +0300 |
commit | 6c46f864e5db7c88fdee1d67dcc20a4451a12ca2 (patch) | |
tree | 7e78dd9fe75257c8ceae42211477a711f09f1cd2 | |
parent | be7935ed8bff19f481b033d0d242c5d5f239ed50 (diff) | |
parent | 2aec3bc4b64ae4980dda86ed77f372a1f66acc7f (diff) |
Merge branch 'jt/transfer-fsck-across-packs-fix'
The code to fsck objects received across multiple packs during a
single git fetch session has been broken when the packfile URI
feature was in use. A workaround has been added by disabling the
codepath to avoid keeping a packfile that is too small.
* jt/transfer-fsck-across-packs-fix:
fetch-pack: do not mix --pack_header and packfile uri
-rw-r--r-- | fetch-pack.c | 4 | ||||
-rwxr-xr-x | t/t5702-protocol-v2.sh | 21 |
2 files changed, 23 insertions, 2 deletions
diff --git a/fetch-pack.c b/fetch-pack.c index 0cb59acc48..6a61a46428 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -846,7 +846,7 @@ static int get_pack(struct fetch_pack_args *args, else demux.out = xd[0]; - if (!args->keep_pack && unpack_limit) { + if (!args->keep_pack && unpack_limit && !index_pack_args) { if (read_pack_header(demux.out, &header)) die(_("protocol error: bad pack header")); @@ -879,7 +879,7 @@ static int get_pack(struct fetch_pack_args *args, strvec_push(&cmd.args, "-v"); if (args->use_thin_pack) strvec_push(&cmd.args, "--fix-thin"); - if (do_keep && (args->lock_pack || unpack_limit)) { + if ((do_keep || index_pack_args) && (args->lock_pack || unpack_limit)) { char hostname[HOST_NAME_MAX + 1]; if (xgethostname(hostname, sizeof(hostname))) xsnprintf(hostname, sizeof(hostname), "localhost"); diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh index 994a76ca3c..2e1243ca40 100755 --- a/t/t5702-protocol-v2.sh +++ b/t/t5702-protocol-v2.sh @@ -881,6 +881,27 @@ test_expect_success 'part of packfile response provided as URI' ' test_line_count = 6 filelist ' +test_expect_success 'packfile URIs with fetch instead of clone' ' + P="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" && + rm -rf "$P" http_child log && + + git init "$P" && + git -C "$P" config "uploadpack.allowsidebandall" "true" && + + echo my-blob >"$P/my-blob" && + git -C "$P" add my-blob && + git -C "$P" commit -m x && + + configure_exclusion "$P" my-blob >h && + + git init http_child && + + GIT_TEST_SIDEBAND_ALL=1 \ + git -C http_child -c protocol.version=2 \ + -c fetch.uriprotocols=http,https \ + fetch "$HTTPD_URL/smart/http_parent" +' + test_expect_success 'fetching with valid packfile URI but invalid hash fails' ' P="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" && rm -rf "$P" http_child log && |