threads / discuss / 42994

appending a pattern to the default "diff.cpp.xfuncname"

Subject: appending a pattern to the default "diff.cpp.xfuncname"

## tl;dr

5 messages between Aug 3, 2016 and Aug 3, 2016.

replies: 4people: 3as markdown or json

Laszlo Ersek· Aug 3, 2016, 10:16 UTC · lore
Hi,

I've used diff.<TYPE>.xfuncname with great success for file <TYPE>s that I defined myself. However, now I would like to append an extra pattern to the TYPE=cpp case (for which git has builtin patterns). Is there an easy way to do this?

I figured I could open-code the builtin patterns from "userdiff.c", and then append my new pattern to those, but it looks kinda gross :)

Thanks! Laszlo

Jeff King· Aug 3, 2016, 18:02 UTC · re: Laszlo Ersek · lore

Re: appending a pattern to the default "diff.cpp.xfuncname"

On Wed, Aug 03, 2016 at 12:16:14PM +0200, Laszlo Ersek wrote:
Show 7 quoted lines
> I've used diff.<TYPE>.xfuncname with great success for file <TYPE>s that
> I defined myself. However, now I would like to append an extra pattern
> to the TYPE=cpp case (for which git has builtin patterns). Is there an
> easy way to do this?
> 
> I figured I could open-code the builtin patterns from "userdiff.c", and
> then append my new pattern to those, but it looks kinda gross :)

Unfortunately, no, the config system has no notion of "append to this value". So you are stuck with extracting the builtin value (which annoyingly, you cannot even get without looking at the source code!), and repeating it in your config file.

-Peff
Laszlo Ersek· Aug 3, 2016, 18:12 UTC · re: Jeff King · lore

Re: appending a pattern to the default "diff.cpp.xfuncname"

On 08/03/16 20:02, Jeff King wrote:
Show 14 quoted lines
> On Wed, Aug 03, 2016 at 12:16:14PM +0200, Laszlo Ersek wrote:
> 
>> I've used diff.<TYPE>.xfuncname with great success for file <TYPE>s that
>> I defined myself. However, now I would like to append an extra pattern
>> to the TYPE=cpp case (for which git has builtin patterns). Is there an
>> easy way to do this?
>>
>> I figured I could open-code the builtin patterns from "userdiff.c", and
>> then append my new pattern to those, but it looks kinda gross :)
> 
> Unfortunately, no, the config system has no notion of "append to this
> value". So you are stuck with extracting the builtin value (which
> annoyingly, you cannot even get without looking at the source code!),
> and repeating it in your config file.

Thank you for confirming! Laszlo

Jakub Narębski· Aug 3, 2016, 18:34 UTC · re: Jeff King · lore

Re: appending a pattern to the default "diff.cpp.xfuncname"

W dniu 03.08.2016 o 20:02, Jeff King pisze:
Show 12 quoted lines
> On Wed, Aug 03, 2016 at 12:16:14PM +0200, Laszlo Ersek wrote:
> 
>> I've used diff.<TYPE>.xfuncname with great success for file <TYPE>s that
>> I defined myself. However, now I would like to append an extra pattern
>> to the TYPE=cpp case (for which git has builtin patterns). Is there an
>> easy way to do this?
>>
>> I figured I could open-code the builtin patterns from "userdiff.c", and
>> then append my new pattern to those, but it looks kinda gross :)
> 
> Unfortunately, no, the config system has no notion of "append to this
> value". 

And I think adding such capability would not be easy. Well, perhaps we could support '+=' in addition to '='?

>         So you are stuck with extracting the builtin value (which
> annoyingly, you cannot even get without looking at the source code!),
> and repeating it in your config file.
I wonder if `git var -l` could provide all default values :-P
-- 
Jakub Narębski
Jeff King· Aug 3, 2016, 18:40 UTC · re: Jakub Narębski · lore

Re: appending a pattern to the default "diff.cpp.xfuncname"

On Wed, Aug 03, 2016 at 08:34:28PM +0200, Jakub Narębski wrote:
Show 5 quoted lines
> > Unfortunately, no, the config system has no notion of "append to this
> > value". 
> 
> And I think adding such capability would not be easy.  Well, perhaps
> we could support '+=' in addition to '='?

We could, but it would be an incompatible syntactic change, which we've so far managed to avoid.

Show 5 quoted lines
> >         So you are stuck with extracting the builtin value (which
> > annoyingly, you cannot even get without looking at the source code!),
> > and repeating it in your config file.
> 
> I wonder if `git var -l` could provide all default values :-P

I had a similar thought, but it's quite difficult because of the way that default values are structured in git. Most code uses initialization of C variables (including structs) to set up default values, and then overrides them if it sees relevant config.

So there is no central code to ask "what is the value of X if I don't provide any config"? It literally requires dumping a bunch of variables.

One thing we could do is move all of those defaults into an "internal" config that is baked into the executable, and then parse that at the lowest-priority level of config. And then "git config --list --show-origin" could presumably just dump it.

But that would mean parsing it at run-time in every program (which is probably not _that_ much overhead, but does feel wrong). I'd also suspect there are a few cases whose defaults are expressed in code, rather than as single variable assignments, and couldn't be represented as config at all.

-Peff

← back to recent threads