Browse Source

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>
maint
Derrick Stolee 7 years ago committed by Junio C Hamano
parent
commit
c39b02ae0a
  1. 10
      midx.c

10
midx.c

@ -280,6 +280,16 @@ static int nth_midxed_pack_entry(struct multi_pack_index *m, struct pack_entry *
if (!is_pack_valid(p)) if (!is_pack_valid(p))
return 0; 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->offset = nth_midxed_offset(m, pos);
e->p = p; e->p = p;



Loading…
Cancel
Save