• N
    implement some resilience against pack corruptions · 8eca0b47
    Nicolas Pitre 提交于
    We should be able to fall back to loose objects or alternative packs when
    a pack becomes corrupted.  This is especially true when an object exists
    in one pack only as a delta but its base object is corrupted.  Currently
    there is no way to retrieve the former object even if the later is
    available in another pack or loose.
    
    This patch allows for a delta to be resolved (with a performance cost)
    using a base object from a source other than the pack where that delta
    is located.  Same thing for non-delta objects: rather than failing
    outright, a search is made in other packs or used loose when the
    currently active pack has it but corrupted.
    
    Of course git will become extremely noisy with error messages when that
    happens.  However, if the operation succeeds nevertheless, a simple
    'git repack -a -f -d' will "fix" the corrupted repository given that all
    corrupted objects have a good duplicate somewhere in the object store,
    possibly manually copied from another source.
    Signed-off-by: NNicolas Pitre <nico@cam.org>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    8eca0b47
cache.h 28.4 KB