• J
    open_sha1_file: report "most interesting" errno · d6c8a05b
    Jeff King 提交于
    When we try to open a loose object file, we first attempt to
    open in the local object database, and then try any
    alternates. This means that the errno value when we return
    will be from the last place we looked (and due to the way
    the code is structured, simply ENOENT if we do not have have
    any alternates).
    
    This can cause confusing error messages, as read_sha1_file
    checks for ENOENT when reporting a missing object. If errno
    is something else, we report that. If it is ENOENT, but
    has_loose_object reports that we have it, then we claim the
    object is corrupted. For example:
    
        $ chmod 0 .git/objects/??/*
        $ git rev-list --all
        fatal: loose object b2d6fab18b92d49eac46dc3c5a0bcafabda20131 (stored in .git/objects/b2/d6fab18b92d49eac46dc3c5a0bcafabda20131) is corrupt
    
    This patch instead keeps track of the "most interesting"
    errno we receive during our search. We consider ENOENT to be
    the least interesting of all, and otherwise report the first
    error found (so problems in the object database take
    precedence over ones in alternates). Here it is with this
    patch:
    
        $ git rev-list --all
        fatal: failed to read object b2d6fab18b92d49eac46dc3c5a0bcafabda20131: Permission denied
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    d6c8a05b
sha1_file.c 81.1 KB