Re: Git 2.26 fetches many times more objects than it should, wasting gigabytes
- From
Jeff King <peff@peff.net>
- Date
- Apr 22, 2020, 19:18 UTC
- Message-ID
- <20200422191841.GA558336@coredump.intra.peff.net>
- In-Reply-To
- <20200422165358.GB140314@google.com>
On Wed, Apr 22, 2020 at 09:53:58AM -0700, Jonathan Nieder wrote:
> When process_acks sees an ACK, it passes it on to the negotiator. > It wants to record that it received an ack to reset in_vain, but > it forgets to! The function is initialized and read but never > written to.
I wondered if it might be something like this, too (and this might well be an independent bug), but...
Show 15 quoted lines
> So I'd expect the following to help:
>
> diff --git i/fetch-pack.c w/fetch-pack.c
> index 1734a573b01..a1d743e1f61 100644
> --- i/fetch-pack.c
> +++ w/fetch-pack.c
> @@ -1287,6 +1287,8 @@ static int process_acks(struct fetch_negotiator *negotiator,
> struct object_id oid;
> if (!get_oid_hex(arg, &oid)) {
> struct commit *commit;
> +
> + received_ack = 1;
> oidset_insert(common, &oid);
> commit = lookup_commit(the_repository, &oid);
> if (negotiator)It doesn't. We never get any ACK from the server at all, because we give up on sending haves before hitting any common commit.
-Peff