Subject: Re: MIDX woes, was Re: [ANNOUNCE] Git v2.54.0-rc2

From: Junio C Hamano <[email-masked]>
Date: Thu, 16 Apr 2026 11:18:35 -0700

Junio C Hamano <[email-masked]> writes:

> Jeff King <[email-masked]> writes:
>
>> On Thu, Apr 16, 2026 at 01:17:33AM -0400, Jeff King wrote:
>>
>>> I think removing the .midx file (and optionally regenerating with the
>>> old version) would be the appropriate workaround, but I wonder how hard
>>> it would be to go back to generating v1 midx files by default. I know v2
>>> is a building block for more advanced features, but for those who are
>>> not using those features yet it is a strict regression.
>>
>> I think doing so is just this one-liner:
>
> Let's do this before Git 2.54 final, then.

As to the other change, rebased to our current codebase, we could
sell it as "futureproofing" for similar breakages we make next, but
that means we are promising ourselves that we will forever keep the
MIDX purely optional feature.  I do not think we want to decide that
we are comfortable with that position during -rc period, so I am not
sure.  These error() messages should be reworded to make it clear
that we are _ignoring_ the corrupt multi-pack-prefix file(s) as a
result, and then further weakened into warning(), I think, if we
were to go in that direction.

 midx.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git c/midx.c w/midx.c
index 81d6ab11e6..06535ffd46 100644
--- c/midx.c
+++ w/midx.c
@@ -145,14 +145,18 @@ static struct multi_pack_index *load_multi_pack_index_one(struct odb_source *sou
 	m->source = source;
 
 	m->signature = get_be32(m->data);
-	if (m->signature != MIDX_SIGNATURE)
-		die(_("multi-pack-index signature 0x%08x does not match signature 0x%08x"),
+	if (m->signature != MIDX_SIGNATURE) {
+		error(_("multi-pack-index signature 0x%08x does not match signature 0x%08x"),
 		      m->signature, MIDX_SIGNATURE);
+		goto cleanup_fail;
+	}
 
 	m->version = m->data[MIDX_BYTE_FILE_VERSION];
 	if (m->version != MIDX_VERSION_V1 && m->version != MIDX_VERSION_V2)
-		die(_("multi-pack-index version %d not recognized"),
+		error(_("multi-pack-index version %d not recognized"),
 		      m->version);
+		goto cleanup_fail;
+	}
 
 	hash_version = m->data[MIDX_BYTE_HASH_VERSION];
 	if (hash_version != oid_version(r->hash_algo)) {