@@ -2069,7 +2069,6 @@ static int try_partial_reuse(struct bitmap_index *bitmap_git,
if (type == OBJ_REF_DELTA || type == OBJ_OFS_DELTA) {
off_t base_offset;
- uint32_t base_pos;
uint32_t base_bitmap_pos;
/*
@@ -2085,8 +2084,6 @@ static int try_partial_reuse(struct bitmap_index *bitmap_git,
if (!base_offset)
return 0;
- offset_to_pack_pos(pack->p, base_offset, &base_pos);
-
if (bitmap_is_midx(bitmap_git)) {
/*
* Cross-pack deltas are rejected for now, but could
@@ -2105,6 +2102,8 @@ static int try_partial_reuse(struct bitmap_index *bitmap_git,
return 0;
}
} else {
+ uint32_t base_pos;
+
if (offset_to_pack_pos(pack->p, base_offset,
&base_pos) < 0)
return 0;
In `try_partial_reuse()`, for any object which is either an OFS_DELTA or REF_DELTA, we need to determine the bitmap position for its base. We handle the case of single- and multi-pack bitmaps separately: - For multi-pack bitmaps, we look to see if the MIDX selected the base we're looking at to represent that object. If the base object was selected from a different pack in the MIDX, we won't reuse the delta. - For single-pack bitmaps, we convert the base object's offset into a pack-relative position (identified here as 'base_pos') by calling `offset_to_pack_pos()`. But we also call `offset_to_pack_pos()` before handling each case above separately. For the MIDX case, this is unnecessary, since we don't need to lookup the base object's pack-relative position; instead, we just care whether the selected copy of that base is from the same pack we're currently operating on. For the non-MIDX case, we end up calling offset_to_pack_pos() again, yielding the same result, making the earlier call wasteful. This behavior dates back to 519e17ff75 (pack-bitmap: prepare to mark objects from multiple packs for reuse, 2023-12-14). Let's correct that by avoiding the unconditional call to 'offset_to_pack_pos()'. Signed-off-by: Taylor Blau <me@ttaylorr.com> --- pack-bitmap.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)