Git fork

pack-revindex: implement `midx_pair_to_pack_pos()`

Now that we have extracted the `midx_key_to_pack_pos()` function, we can
implement the `midx_pair_to_pack_pos()` function which accepts (pack_id,
offset) tuples and returns an index into the psuedo-pack order.

This will be used in a following commit in order to figure out whether
or not the MIDX chose a given delta's base object from the same pack as
the delta resides in. It will do so by locating the base object's offset
in the pack, and then performing a binary search using the same pack ID
with the base object's offset.

If (and only if) it finds a match (at any position) we can guarantee
that the MIDX selected both halves of the delta/base pair from the same
pack.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Taylor Blau and committed by
Junio C Hamano
dbd5c520 e1bfe30c

+14
+11
pack-revindex.c
··· 564 564 565 565 return midx_key_to_pack_pos(m, &key, pos); 566 566 } 567 + 568 + int midx_pair_to_pack_pos(struct multi_pack_index *m, uint32_t pack_int_id, 569 + off_t ofs, uint32_t *pos) 570 + { 571 + struct midx_pack_key key = { 572 + .pack = pack_int_id, 573 + .offset = ofs, 574 + .midx = m, 575 + }; 576 + return midx_key_to_pack_pos(m, &key, pos); 577 + }
+3
pack-revindex.h
··· 142 142 */ 143 143 int midx_to_pack_pos(struct multi_pack_index *midx, uint32_t at, uint32_t *pos); 144 144 145 + int midx_pair_to_pack_pos(struct multi_pack_index *midx, uint32_t pack_id, 146 + off_t ofs, uint32_t *pos); 147 + 145 148 #endif