Skip to content
  • Jeff King's avatar
    teach diffcore-rename to optionally ignore empty content · 90d43b07
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Our rename detection is a heuristic, matching pairs of
    removed and added files with similar or identical content.
    It's unlikely to be wrong when there is actual content to
    compare, and we already take care not to do inexact rename
    detection when there is not enough content to produce good
    results.
    
    However, we always do exact rename detection, even when the
    blob is tiny or empty. It's easy to get false positives with
    an empty blob, simply because it is an obvious content to
    use as a boilerplate (e.g., when telling git that an empty
    directory is worth tracking via an empty .gitignore).
    
    This patch lets callers specify whether or not they are
    interested in using empty files as rename sources and
    destinations. The default is "yes", keeping the original
    behavior. It works by detecting the empty-blob sha1 for
    rename sources and destinations.
    
    One more flexible alternative would be to allow the caller
    to specify a minimum size for a blob to be "interesting" for
    rename detection. But that would catch small boilerplate
    files, not large ones (e.g., if you had the GPL COPYING file
    in many directories).
    
    A better alternative would be to allow a "-rename"
    gitattribute to allow boilerplate files to be marked as
    such. I'll leave the complexity of that solution until such
    time as somebody actually wants it. The complaints we've
    seen so far revolve around empty files, so let's start with
    the simple thing.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    90d43b07