]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-revindex.c: avoid direct revindex access in 'offset_to_pack_pos()'
authorTaylor Blau <me@ttaylorr.com>
Wed, 13 Jan 2021 22:25:10 +0000 (17:25 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Jan 2021 05:53:48 +0000 (21:53 -0800)
To prepare for on-disk reverse indexes, remove a spot in
'offset_to_pack_pos()' that looks at the 'revindex' array in 'struct
packed_git'.

Even though this use of the revindex pointer is within pack-revindex.c,
this clean up is still worth doing. Since the 'revindex' pointer will be
NULL when reading from an on-disk reverse index (instead the
'revindex_data' pointer will be mmaped to the 'pack-*.rev' file), this
call-site would have to include a conditional to lookup the offset for
position 'mi' each iteration through the search.

So instead of open-coding 'pack_pos_to_offset()', call it directly from
within 'offset_to_pack_pos()'.

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

index a508d5f0a4df27c53b2271aaff4dceb242cecd45..5e69bc7372f5476429fb11c53d5b4bd24390798c 100644 (file)
@@ -177,21 +177,21 @@ int load_pack_revindex(struct packed_git *p)
 int offset_to_pack_pos(struct packed_git *p, off_t ofs, uint32_t *pos)
 {
        unsigned lo, hi;
-       const struct revindex_entry *revindex;
 
        if (load_pack_revindex(p) < 0)
                return -1;
 
        lo = 0;
        hi = p->num_objects + 1;
-       revindex = p->revindex;
 
        do {
                const unsigned mi = lo + (hi - lo) / 2;
-               if (revindex[mi].offset == ofs) {
+               off_t got = pack_pos_to_offset(p, mi);
+
+               if (got == ofs) {
                        *pos = mi;
                        return 0;
-               } else if (ofs < revindex[mi].offset)
+               } else if (ofs < got)
                        hi = mi;
                else
                        lo = mi + 1;