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... > 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