Re: [PATCH 2/2] diff: add custom regular expressions for function names

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux