Skip to content
  • Jeff King's avatar
    diff: introduce diff.<driver>.binary · 122aa6f9
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The "diff" gitattribute is somewhat overloaded right now. It
    can say one of three things:
    
      1. this file is definitely binary, or definitely not
         (i.e., diff or !diff)
      2. this file should use an external diff engine (i.e.,
         diff=foo, diff.foo.command = custom-script)
      3. this file should use particular funcname patterns
         (i.e., diff=foo, diff.foo.(x?)funcname = some-regex)
    
    Most of the time, there is no conflict between these uses,
    since using one implies that the other is irrelevant (e.g.,
    an external diff engine will decide for itself whether the
    file is binary).
    
    However, there is at least one conflicting situation: there
    is no way to say "use the regular rules to determine whether
    this file is binary, but if we do diff it textually, use
    this funcname pattern." That is, currently setting diff=foo
    indicates that the file is definitely text.
    
    This patch introduces a "binary" config option for a diff
    driver, so that one can explicitly set diff.foo.binary. We
    default this value to "don't know". That is, setting a diff
    attribute to "foo" and using "diff.foo.funcname" will have
    no effect on the binaryness of a file. To get the current
    behavior, one can set diff.foo.binary to true.
    
    This patch also has one additional advantage: it cleans up
    the interface to the userdiff code a bit. Before, calling
    code had to know more about whether attributes were false,
    true, or unset to determine binaryness. Now that binaryness
    is a property of a driver, we can represent these situations
    just by passing back a driver struct.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarShawn O. Pearce <spearce@spearce.org>
    122aa6f9