• J
    peel_ref: check object type before loading · 6c4a060d
    Jeff King 提交于
    The point of peel_ref is to dereference tags; if the base
    object is not a tag, then we can return early without even
    loading the object into memory.
    
    This patch accomplishes that by checking sha1_object_info
    for the type. For a packed object, we can get away with just
    looking in the pack index. For a loose object, we only need
    to inflate the first couple of header bytes.
    
    This is a bit of a gamble; if we do find a tag object, then
    we will end up loading the content anyway, and the extra
    lookup will have been wasteful. However, if it is not a tag
    object, then we save loading the object entirely. Depending
    on the ratio of non-tags to tags in the input, this can be a
    minor win or minor loss.
    
    However, it does give us one potential major win: if a ref
    points to a large blob (e.g., via an unannotated tag), then
    we can avoid looking at it entirely.
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    6c4a060d
refs.c 66.3 KB