diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-09-23 20:44:45 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-09-23 20:44:46 (GMT) |
commit | 28caad63d0f58611a22bf5b11e4914496ecb25b1 (patch) | |
tree | e93f71d16c3101bcd4b3fc17642dc1f540215774 /midx.c | |
parent | 6c84b007c41638814137d296e75446a9b4865fd2 (diff) | |
parent | 09ef66179b943d03cbe0bea0603e5f40574695a1 (diff) | |
download | git-28caad63d0f58611a22bf5b11e4914496ecb25b1.zip git-28caad63d0f58611a22bf5b11e4914496ecb25b1.tar.gz git-28caad63d0f58611a22bf5b11e4914496ecb25b1.tar.bz2 |
Merge branch 'rs/packfile-bad-object-list-in-oidset'
Replace a handcrafted data structure used to keep track of bad
objects in the packfile API by an oidset.
* rs/packfile-bad-object-list-in-oidset:
packfile: use oidset for bad objects
packfile: convert has_packed_and_bad() to object_id
packfile: convert mark_bad_packed_object() to object_id
midx: inline nth_midxed_pack_entry()
oidset: make oidset_size() an inline function
Diffstat (limited to 'midx.c')
-rw-r--r-- | midx.c | 37 |
1 files changed, 11 insertions, 26 deletions
@@ -283,14 +283,18 @@ uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos) (off_t)pos * MIDX_CHUNK_OFFSET_WIDTH); } -static int nth_midxed_pack_entry(struct repository *r, - struct multi_pack_index *m, - struct pack_entry *e, - uint32_t pos) +int fill_midx_entry(struct repository * r, + const struct object_id *oid, + struct pack_entry *e, + struct multi_pack_index *m) { + uint32_t pos; uint32_t pack_int_id; struct packed_git *p; + if (!bsearch_midx(oid, m, &pos)) + return 0; + if (pos >= m->num_objects) return 0; @@ -310,15 +314,9 @@ static int nth_midxed_pack_entry(struct repository *r, if (!is_pack_valid(p)) return 0; - if (p->num_bad_objects) { - uint32_t i; - struct object_id oid; - nth_midxed_object_oid(&oid, m, pos); - for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(oid.hash, - p->bad_object_sha1 + the_hash_algo->rawsz * i)) - return 0; - } + if (oidset_size(&p->bad_objects) && + oidset_contains(&p->bad_objects, oid)) + return 0; e->offset = nth_midxed_offset(m, pos); e->p = p; @@ -326,19 +324,6 @@ static int nth_midxed_pack_entry(struct repository *r, return 1; } -int fill_midx_entry(struct repository * r, - const struct object_id *oid, - struct pack_entry *e, - struct multi_pack_index *m) -{ - uint32_t pos; - - if (!bsearch_midx(oid, m, &pos)) - return 0; - - return nth_midxed_pack_entry(r, m, e, pos); -} - /* Match "foo.idx" against either "foo.pack" _or_ "foo.idx". */ static int cmp_idx_or_pack_name(const char *idx_or_pack_name, const char *idx_name) |