diff options
author | Junio C Hamano <gitster@pobox.com> | 2018-03-13 13:34:04 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-03-13 13:34:04 -0700 |
commit | 7d4bebfe93b5ef0eb81b8a7b0f6edf365104ed01 (patch) | |
tree | b72cb530e83c5ea670b1bfb4c7e506e5c3077836 /packfile.c | |
parent | 0fd90daba84a165adda7cd4721fcd009e0bebc56 (diff) | |
parent | b4e00f7306a160639f047b3421985e8f3d0c6fb1 (diff) | |
download | git-7d4bebfe93b5ef0eb81b8a7b0f6edf365104ed01.tar.gz |
Merge branch 'jt/binsearch-with-fanout' into HEAD
* jt/binsearch-with-fanout:
packfile: refactor hash search with fanout table
packfile: remove GIT_DEBUG_LOOKUP log statements
Diffstat (limited to 'packfile.c')
-rw-r--r-- | packfile.c | 29 |
1 files changed, 4 insertions, 25 deletions
diff --git a/packfile.c b/packfile.c index 7dbe8739d1..5d07f330c8 100644 --- a/packfile.c +++ b/packfile.c @@ -1722,11 +1722,8 @@ off_t find_pack_entry_one(const unsigned char *sha1, { const uint32_t *level1_ofs = p->index_data; const unsigned char *index = p->index_data; - unsigned hi, lo, stride; - static int debug_lookup = -1; - - if (debug_lookup < 0) - debug_lookup = !!getenv("GIT_DEBUG_LOOKUP"); + unsigned stride; + uint32_t result; if (!index) { if (open_pack_index(p)) @@ -1739,8 +1736,6 @@ off_t find_pack_entry_one(const unsigned char *sha1, index += 8; } index += 4 * 256; - hi = ntohl(level1_ofs[*sha1]); - lo = ((*sha1 == 0x0) ? 0 : ntohl(level1_ofs[*sha1 - 1])); if (p->index_version > 1) { stride = 20; } else { @@ -1748,24 +1743,8 @@ off_t find_pack_entry_one(const unsigned char *sha1, index += 4; } - if (debug_lookup) - printf("%02x%02x%02x... lo %u hi %u nr %"PRIu32"\n", - sha1[0], sha1[1], sha1[2], lo, hi, p->num_objects); - - while (lo < hi) { - unsigned mi = lo + (hi - lo) / 2; - int cmp = hashcmp(index + mi * stride, sha1); - - if (debug_lookup) - printf("lo %u hi %u rg %u mi %u\n", - lo, hi, hi - lo, mi); - if (!cmp) - return nth_packed_object_offset(p, mi); - if (cmp > 0) - hi = mi; - else - lo = mi+1; - } + if (bsearch_hash(sha1, level1_ofs, index, stride, &result)) + return nth_packed_object_offset(p, result); return 0; } |