diff: unify external diff and funcname parsing code
authorJeff King <peff@peff.net>
Sun, 5 Oct 2008 21:43:21 +0000 (17:43 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sat, 18 Oct 2008 15:02:21 +0000 (08:02 -0700)
commitbe58e70dbadf3cb3f4aa5829d513d886ae8bc460
tree5a0624e8c9113b4d5606ff0b2b8b240487924883
parente7881c3594d22eb711654d2febfd577dc4994f34
diff: unify external diff and funcname parsing code

Both sets of code assume that one specifies a diff profile
as a gitattribute via the "diff=foo" attribute. They then
pull information about that profile from the config as
diff.foo.*.

The code for each is currently completely separate from the
other, which has several disadvantages:

  - there is duplication as we maintain code to create and
    search the separate lists of external drivers and
    funcname patterns

  - it is difficult to add new profile options, since it is
    unclear where they should go

  - the code is difficult to follow, as we rely on the
    "check if this file is binary" code to find the funcname
    pattern as a side effect. This is the first step in
    refactoring the binary-checking code.

This patch factors out these diff profiles into "userdiff"
drivers. A file with "diff=foo" uses the "foo" driver, which
is specified by a single struct.

Note that one major difference between the two pieces of
code is that the funcname patterns are always loaded,
whereas external drivers are loaded only for the "git diff"
porcelain; the new code takes care to retain that situation.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Makefile
diff.c
userdiff.c [new file with mode: 0644]
userdiff.h [new file with mode: 0644]