Skip to content
  • Jeff King's avatar
    diff: handle diffstat of rewritten binary files · ded0abc7
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The logic in builtin_diffstat assumes that a
    complete_rewrite pair should have its lines counted. This is
    nonsensical for binary files and leads to confusing things
    like:
    
      $ git diff --stat --summary HEAD^ HEAD
       foo.rand |  Bin 4096 -> 4096 bytes
       1 files changed, 0 insertions(+), 0 deletions(-)
    
      $ git diff --stat --summary -B HEAD^ HEAD
       foo.rand |   34 +++++++++++++++-------------------
       1 files changed, 15 insertions(+), 19 deletions(-)
       rewrite foo.rand (100%)
    
    So let's reorder the function to handle binary files first
    (which from diffstat's perspective look like complete
    rewrites anyway), then rewrites, then actual diffstats.
    
    There are two bonus prizes to this reorder:
    
      1. It gets rid of a now-superfluous goto.
    
      2. The binary case is at the top, which means we can
         further optimize it in the next patch.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    ded0abc7