aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2025-12-10 13:52:18 +0100
committerJunio C Hamano <gitster@pobox.com>2025-12-11 12:09:58 +0900
commit665d19ec7bcc2d578e2fa2701f7399a6a965b086 (patch)
tree1e3dd8ec20c1f6f2252348c248eae4963f48e021 /t
parent9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed (diff)
downloadgit-665d19ec7bcc2d578e2fa2701f7399a6a965b086.tar.xz
midx: fix `BUG()` when getting preferred pack without a reverse index
The function `midx_preferred_pack()` returns the preferred pack for a given multi-pack index. To compute the preferred pack we: 1. Take the first position indexed by the MIDX in pseudo-pack order. 2. Convert this pseudo-pack position into the MIDX position. 3. We then look up the pack that corresponds to this MIDX position. This reliably returns the preferred pack given that all of its contained objects will be up front in pseudo-pack order. The second step that turns the pseudo-pack order into MIDX order requires the reverse index though, which may not exist for example when the MIDX does not have a bitmap. And in that case one may easily hit a bug: BUG: ../pack-revindex.c:491: pack_pos_to_midx: reverse index not yet loaded In theory, `midx_preferred_pack()` already knows to handle the case where no reverse index exists, as it calls `load_midx_revindex()` before calling into `midx_preferred_pack()`. But we only check for negative return values there, even though the function returns a positive error code in case the reverse index does not exist. Fix the issue by testing for a non-zero return value instead, same as all the other callers of this function already do. While at it, document the return value of `load_midx_revindex()`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rwxr-xr-xt/t5319-multi-pack-index.sh13
1 files changed, 13 insertions, 0 deletions
diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh
index 93f319a4b2..9492a9737b 100755
--- a/t/t5319-multi-pack-index.sh
+++ b/t/t5319-multi-pack-index.sh
@@ -350,7 +350,20 @@ test_expect_success 'preferred pack from existing MIDX without bitmaps' '
# the new MIDX
git multi-pack-index write --preferred-pack=pack-$pack.pack
)
+'
+test_expect_success 'preferred pack cannot be determined without bitmap' '
+ test_when_finished "rm -fr preferred-can-be-queried" &&
+ git init preferred-can-be-queried &&
+ (
+ cd preferred-can-be-queried &&
+ test_commit initial &&
+ git repack -Adl --write-midx --no-write-bitmap-index &&
+ test_must_fail test-tool read-midx --preferred-pack .git/objects 2>err &&
+ test_grep "could not determine MIDX preferred pack" err &&
+ git repack -Adl --write-midx --write-bitmap-index &&
+ test-tool read-midx --preferred-pack .git/objects
+ )
'
test_expect_success 'verify multi-pack-index success' '