Hi, this patch series addresses an issue with storing duplicate object IDs sent by the client in git-upload-pack(1). If the client sends repeated "have" lines for an object ID that doesn't refer to a commit, then we end up storing that object ID repeatedly in the `have_obj` array. This leads to sending out repeated "ACK"s for the same object. The series applies on top of "maint" at c44beea485 (Git 2.51, 2025-08-17). Changes in v2: - Change ordering so that we always mark parents of already-seen commits as `THEY_HAVE`. The first version was _probably_ fine, but I don't feel too comfortable with a "probably". - Link to v1: https://lore.kernel.org/r/20250903-b4-pks-upload-pack-repeated-non-commit-acks-v1-0-4e019af4dddc@xxxxxx Thanks! Patrick --- Patrick Steinhardt (2): t5530: modernize tests upload-pack: don't ACK non-commits repeatedly in protocol v2 t/t5530-upload-pack-error.sh | 68 +++++++++++++++++++++++++++----------------- upload-pack.c | 19 ++++++------- 2 files changed, 51 insertions(+), 36 deletions(-) Range-diff versus v1: 1: a42d231813 = 1: 26ecbcf460 t5530: modernize tests 2: 1544160961 ! 2: 11e32bf5e6 upload-pack: don't ACK non-commits repeatedly in protocol v2 @@ upload-pack.c: static void create_pack_file(struct upload_pack_data *pack_data, if (!o) die("oops (%s)", oid_to_hex(oid)); -+ -+ if (o->flags & THEY_HAVE) -+ return 0; -+ o->flags |= THEY_HAVE; + if (o->type == OBJ_COMMIT) { struct commit_list *parents; @@ upload-pack.c: static int do_got_oid(struct upload_pack_data *data, const struct - } - return 0; + ++ if (o->flags & THEY_HAVE) ++ return 0; ++ o->flags |= THEY_HAVE; ++ + add_object_array(o, NULL, &data->have_obj); + return 1; } --- base-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0 change-id: 20250903-b4-pks-upload-pack-repeated-non-commit-acks-49b363e1d0e1