Skip to content
  • Jonathan Tan's avatar
    cache-tree: skip some blob checks in partial clone · 2f215ff1
    Jonathan Tan authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    In a partial clone, whenever a sparse checkout occurs, the existence of
    all blobs in the index is verified, whether they are included or
    excluded by the .git/info/sparse-checkout specification. This
    significantly degrades performance because a lazy fetch occurs whenever
    the existence of a missing blob is checked.
    
    This is because cache_tree_update() checks the existence of all objects
    in the index, whether or not CE_SKIP_WORKTREE is set on them. Teach
    cache_tree_update() to skip checking CE_SKIP_WORKTREE objects when the
    repository is a partial clone. This improves performance for sparse
    checkout and also other operations that use cache_tree_update().
    
    Instead of completely removing the check, an argument could be made that
    the check should instead be replaced by a check that the blob is
    promised, but for performance reasons, I decided not to do this.
    If the user needs to verify the repository, it can be done using fsck
    (which will notify if a tree points to a missing and non-promised blob,
    whether the blob is included or excluded by the sparse-checkout
    specification).
    
    Signed-off-by: default avatarJonathan Tan <jonathantanmy@google.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    2f215ff1