• J
    sha1_file: add read_loose_object() function · f6371f92
    Jeff King 提交于
    It's surprisingly hard to ask the sha1_file code to open a
    _specific_ incarnation of a loose object. Most of the
    functions take a sha1, and loop over the various object
    types (packed versus loose) and locations (local versus
    alternates) at a low level.
    
    However, some tools like fsck need to look at a specific
    file. This patch gives them a function they can use to open
    the loose object at a given path.
    
    The implementation unfortunately ends up repeating bits of
    related functions, but there's not a good way around it
    without some major refactoring of the whole sha1_file stack.
    We need to mmap the specific file, then partially read the
    zlib stream to know whether we're streaming or not, and then
    finally either stream it or copy the data to a buffer.
    
    We can do that by assembling some of the more arcane
    internal sha1_file functions, but we end up having to
    essentially reimplement unpack_sha1_file(), along with the
    streaming bits of check_sha1_signature().
    
    Still, most of the ugliness is contained in the new
    function, and the interface is clean enough that it may be
    reusable (though it seems unlikely anything but git-fsck
    would care about opening a specific file).
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    f6371f92
sha1_file.c 96.9 KB