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
This commit is contained in:
Junio C Hamano 2021-03-08 16:04:47 -08:00
commit 6c46f864e5
2 changed files with 23 additions and 2 deletions

View file

@ -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");

View file

@ -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 &&