• S
    http-fetch: Use index-pack rather than verify-pack to check packs · fe72d420
    Shawn O. Pearce 提交于
    To ensure we don't leave a corrupt pack file positioned as though
    it were a valid pack file, run index-pack on the temporary pack
    before we rename it to its final name.  If index-pack crashes out
    when it discovers file corruption (e.g. GitHub's error HTML at the
    end of the file), simply delete the temporary files to cleanup.
    
    By waiting until the pack has been validated before we move it
    to its final name, we eliminate a race condition where another
    concurrent reader might try to access the pack at the same time
    that we are still trying to verify its not corrupt.
    
    Switching from verify-pack to index-pack is a change in behavior,
    but it should turn out better for users.  The index-pack algorithm
    tries to minimize disk seeks, as well as the number of times any
    given object is inflated, by organizing its work along delta chains.
    The verify-pack logic does not attempt to do this, thrashing the
    delta base cache and the filesystem cache.
    
    By recreating the index file locally, we also can automatically
    upgrade from a v1 pack table of contents to v2.  This makes the
    CRC32 data available for use during later repacks, even if the
    server didn't have them on hand.
    Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
    Acked-by: NTay Ray Chuan <rctay89@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    fe72d420
http.c 31.4 KB