Junio C Hamano <gitster@xxxxxxxxx> writes: > Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: > >> On Wed, 4 Jul 2007, Johannes Schindelin wrote: >>> >>> This patch introduces a config variable diff.functionNameRegexp >>> which replaces the default heuristics. If the pattern contains >>> a group, the match of this group is used for the hunk header >>> instead of the whole match. >> >> Umm. Shouldn't it be a path-name based attribute instead? >> >> That way you can set it to be different things for different source files >> in the same repository.. IOW, think mixed Java/C codebases. > > Absolutely. I'll take it from there. I'll follow-up this message with two patches. The first one is almost the same as Johannes's, but I got rid of the new global variable. The second one discards Johannes's use of a single config variable and replaces it with gitattribute access. The second one is still a WIP; currently you can mark the path to use java convention to find hunk header with: $ echo '*.java funcname=java' >.gitattributes If there are useful "hunk header regexp" to make built-in, you can add them to diff_hunk_header_regexp(). We also should allow user override or define custom regexp with a configuration section, perhaps like: [funcname] java = ... perl = ... default = ... There are enough existing code in diff and convert area that use (path -> attribute -> config) mapping in a very similar way and any git hacker wannabe should be able to mimick them to implement such a support, but tonight's WIP does not have it. *NOTE IN BIG RED LETTERS* I do not particularly like the way multiple regexps are used in Johannes's patch, but I left it as-is, as that part of the change is orthogonal from the support to use the gitattribute mechanism, and the primary reason I got involved in this topic is to give help around the latter area. I think using multiple regexp is cute, but if we do that, it should allow people to pick from: public class Beer { int special; public static void main(String args[]) { ... modified part is here ... with two regexp matches, say: /^(public|private|protectd) class (.*)/ then /^ +.* (\w*\(.*)$/ and define the hunk_header format as something like: "\[1,2]::\[2,1]" meaning, "pick the second capture group from the match data of the first regexp, followed by double-colon, and pick the first capture group from the match data of the second regexp", to result in "Beer::main(String args[])". You should be able to pick "/package (\w+);/ then /^sub (\w+)/" in Perl code using the same idea. I am not married to the syntax I used in the above examples, though. - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html