Skip to content
  • Jonathan Tan's avatar
    diff: restrict when prefetching occurs · 95acf11a
    Jonathan Tan authored and Junio C Hamano's avatar Junio C Hamano committed
    Commit 7fbbcb21
    
     ("diff: batch fetching of missing blobs", 2019-04-08)
    optimized "diff" by prefetching blobs in a partial clone, but there are
    some cases wherein blobs do not need to be prefetched. In these cases,
    any command that uses the diff machinery will unnecessarily fetch blobs.
    
    diffcore_std() may read blobs when it calls the following functions:
     (1) diffcore_skip_stat_unmatch() (controlled by the config variable
         diff.autorefreshindex)
     (2) diffcore_break() and diffcore_merge_broken() (for break-rewrite
         detection)
     (3) diffcore_rename() (for rename detection)
     (4) diffcore_pickaxe() (for detecting addition/deletion of specified
         string)
    
    Instead of always prefetching blobs, teach diffcore_skip_stat_unmatch(),
    diffcore_break(), and diffcore_rename() to prefetch blobs upon the first
    read of a missing object. This covers (1), (2), and (3): to cover the
    rest, teach diffcore_std() to prefetch if the output type is one that
    includes blob data (and hence blob data will be required later anyway),
    or if it knows that (4) will be run.
    
    Helped-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJonathan Tan <jonathantanmy@google.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    95acf11a