diff options
author | Derrick Stolee <dstolee@microsoft.com> | 2018-08-20 16:51:57 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-08-20 15:31:39 -0700 |
commit | c39b02ae0ae90b9fda353f87502ace9ba36db839 (patch) | |
tree | 62b3fd9b88a80fb0549c701b3d5833b53b818967 | |
parent | multi-pack-index: store local property (diff) | |
download | tgif-c39b02ae0ae90b9fda353f87502ace9ba36db839.tar.xz |
midx: mark bad packed objects
When an object fails to decompress from a pack-file, we mark the object
as 'bad' so we can retry with a different copy of the object (if such a
copy exists).
Before now, the multi-pack-index did not update the bad objects list for
the pack-files it contains, and we did not check the bad objects list
when reading an object. Now, do both.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | midx.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -280,6 +280,16 @@ static int nth_midxed_pack_entry(struct multi_pack_index *m, struct pack_entry * 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 (!hashcmp(oid.hash, + p->bad_object_sha1 + the_hash_algo->rawsz * i)) + return 0; + } + e->offset = nth_midxed_offset(m, pos); e->p = p; |