# diff settings

13 messages from 2009-01-24 to 2009-01-31. Participants: Keith Cascio, Jeff King, Teemu Likonen, Ted Pavlic, Johannes Schindelin, Nanako Shiraishi.
Thread: https://gitlist.dev/t/17340

## Keith Cascio, 2009-01-24 17:38

Subject: diff settings
Message-ID: <alpine.GSO.2.00.0901240936080.23073@kiwi.cs.ucla.edu>
URL: https://gitlist.dev/e/alpine.GSO.2.00.0901240936080.23073%40kiwi.cs.ucla.edu

```
How do I configure my local git so that diff always obeys a particular option, 
e.g. "-w", without needing to type it on the command line each time?

Thanks,
Keith

```

## Jeff King, 2009-01-24 19:22

Subject: Re: diff settings
Message-ID: <20090124192222.GA18010@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20090124192222.GA18010%40coredump.intra.peff.net
In-Reply-To: <alpine.GSO.2.00.0901240936080.23073@kiwi.cs.ucla.edu>

```
On Sat, Jan 24, 2009 at 09:38:18AM -0800, Keith Cascio wrote:

> How do I configure my local git so that diff always obeys a particular
> option, e.g. "-w", without needing to type it on the command line each
> time?

AFAIK, there is not a way to do it in the general case (though there are
specific config options for things like rename support). When I
refactored the gitattributes diff=$foo code a few months back, I tried
to keep in mind the possibility of a "diff options" field. But I never
actually implemented anything, as I don't personally ever use diff
options in such a way.

If you're interested, it would probably not be too hard to implement
(see userdiff.[ch], and the external and textconv code in diff.c for a
start).

-Peff

```

## Teemu Likonen, 2009-01-24 19:33

Subject: Re: diff settings
Message-ID: <87ocxwv6qg.fsf@iki.fi>
URL: https://gitlist.dev/e/87ocxwv6qg.fsf%40iki.fi
In-Reply-To: <alpine.GSO.2.00.0901240936080.23073@kiwi.cs.ucla.edu>

```
Keith Cascio (2009-01-24 09:38 -0800) wrote:

> How do I configure my local git so that diff always obeys a particular
> option, e.g. "-w", without needing to type it on the command line each
> time?

It seems that the answer is "no", but aliases are a work-around:

    git config --global alias.dff "diff -w"

Then "git dff" is your new "git diff -w". :-)

```

## Keith Cascio, 2009-01-24 20:01

Subject: Re: diff settings
Message-ID: <alpine.GSO.2.00.0901241159050.23073@kiwi.cs.ucla.edu>
URL: https://gitlist.dev/e/alpine.GSO.2.00.0901241159050.23073%40kiwi.cs.ucla.edu
In-Reply-To: <87ocxwv6qg.fsf@iki.fi>

```
> It seems that the answer is "no", but aliases are a work-around:
> 
>     git config --global alias.dff "diff -w"
> 
> Then "git dff" is your new "git diff -w". :-)

That feature is gonna come in handy.  It doesn't 100% fulfill my needs here but 
I like it!  Thanks, I did not know about alias.*

```

## Ted Pavlic, 2009-01-25 21:02

Subject: Re: diff settings
Message-ID: <497CD352.2060402@tedpavlic.com>
URL: https://gitlist.dev/e/497CD352.2060402%40tedpavlic.com
In-Reply-To: <alpine.GSO.2.00.0901241159050.23073@kiwi.cs.ucla.edu>

```
>>      git config --global alias.dff "diff -w"
>>
>> Then "git dff" is your new "git diff -w". :-)
>
> That feature is gonna come in handy.  It doesn't 100% fulfill my needs here but
> I like it!  Thanks, I did not know about alias.*

Mercurial has a "defaults.*" that does exactly what you want. That is, 
you can say

[defaults]
diff = -w

and "hg diff" will automatically do "hg diff -w". Such a feature might 
be a nice addition to git.

--Ted


-- 
Ted Pavlic <ted@tedpavlic.com>

   Please visit my ALS association page:
         http://web.alsa.org/goto/tedpavlic
   My family appreciates your support in the fight to defeat ALS.

```

## Keith Cascio, 2009-01-25 21:11

Subject: Re: diff settings
Message-ID: <alpine.GSO.2.00.0901251307030.12651@kiwi.cs.ucla.edu>
URL: https://gitlist.dev/e/alpine.GSO.2.00.0901251307030.12651%40kiwi.cs.ucla.edu
In-Reply-To: <497CD352.2060402@tedpavlic.com>

```
On Sun, 25 Jan 2009, Ted Pavlic wrote:

> Mercurial has a "defaults.*" that does exactly what you want. That is, you can
> say
> 
> [defaults]
> diff = -w
> 
> and "hg diff" will automatically do "hg diff -w". Such a feature might be a 
> nice addition to git.

Thank you, that is very interesting.  I just submitted a patch this morning that 
does exactly what you describe, but I called it "primer" instead of "defaults" 
because it seemed more explicit.  Check it out.

                            -- Keith

```

## Ted Pavlic, 2009-01-26 02:06

Subject: Re: diff settings
Message-ID: <497D1AB7.7000208@tedpavlic.com>
URL: https://gitlist.dev/e/497D1AB7.7000208%40tedpavlic.com
In-Reply-To: <alpine.GSO.2.00.0901251307030.12651@kiwi.cs.ucla.edu>

```
>> Mercurial has a "defaults.*" that does exactly what you want. That is, you can
>> [defaults]
>> diff = -w
>> and "hg diff" will automatically do "hg diff -w". Such a feature might be a
>> nice addition to git.
> Thank you, that is very interesting.  I just submitted a patch this morning that
> does exactly what you describe, but I called it "primer" instead of "defaults"
> because it seemed more explicit.  Check it out.

I saw that. However, in Mercurial's case, the [defaults] section applies 
to all commands (including new ones introduced by extensions). That is, 
it looks like your patch adds a diff.primer, but Mercurial would add a 
primer.* that allows you to have a primer.diff, primer.commit, etc.

For example, wouldn't it be nice to have something like...

[defaults]
diff = -w
commit = -a

etc.? Right now the only way you can do that is with aliases (e.g., I 
have an alias from "ci" to "commit -a").

This task is pretty easy in Mercurial because Mercurial porcelains are 
implemented as modules that are all executed through the central "hg" 
command. This isn't the case with git.

(on a somewhat unrelated note, Mercurial does have a [diff] section that 
allows for, say, forcing the use of git diff and other things)

--Ted



-- 
Ted Pavlic <ted@tedpavlic.com>

   Please visit my ALS association page:
         http://web.alsa.org/goto/tedpavlic
   My family appreciates your support in the fight to defeat ALS.

```

## Ted Pavlic, 2009-01-29 16:26

Subject: Re: diff settings
Message-ID: <4981D8AD.6000000@tedpavlic.com>
URL: https://gitlist.dev/e/4981D8AD.6000000%40tedpavlic.com
In-Reply-To: <497D1AB7.7000208@tedpavlic.com>

```
> This task is pretty easy in Mercurial because Mercurial porcelains are
> implemented as modules that are all executed through the central "hg"
> command. This isn't the case with git.

(on the other hand, having a "[defaults]" section that only applies when 
commands are called via "git" might be nice. That way you can use the 
"git-CMD" when you want to use CMD without the "[defaults]"... perhaps?)

-- 
Ted Pavlic <ted@tedpavlic.com>

   Please visit my ALS association page:
         http://web.alsa.org/goto/tedpavlic
   My family appreciates your support in the fight to defeat ALS.

```

## Johannes Schindelin, 2009-01-29 16:33

Subject: Re: diff settings
Message-ID: <alpine.DEB.1.00.0901291731220.3586@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0901291731220.3586%40pacific.mpi-cbg.de
In-Reply-To: <4981D8AD.6000000@tedpavlic.com>

```
Hi,

On Thu, 29 Jan 2009, Ted Pavlic wrote:

> > This task is pretty easy in Mercurial because Mercurial porcelains are
> > implemented as modules that are all executed through the central "hg"
> > command. This isn't the case with git.
> 
> (on the other hand, having a "[defaults]" section that only applies when
> commands are called via "git" might be nice. That way you can use the
> "git-CMD" when you want to use CMD without the "[defaults]"... perhaps?)

Nope, the dash form is deprecated, and once y'all out there finally do not 
write it any more, we can start thinking about _not_ hardlinking the 
builtins to their dashed form anymore.

Believe it or not, we already have a distinction between what is called 
from scripts vs from humans: plumbing vs porcelain.  So you can set the 
defaults for porcelain as much as you want, but please leave plumbing 
alone.

Ciao,
Dscho

```

## Keith Cascio, 2009-01-29 18:46

Subject: Re: diff settings
Message-ID: <alpine.GSO.2.00.0901291044280.23065@kiwi.cs.ucla.edu>
URL: https://gitlist.dev/e/alpine.GSO.2.00.0901291044280.23065%40kiwi.cs.ucla.edu
In-Reply-To: <alpine.DEB.1.00.0901291731220.3586@pacific.mpi-cbg.de>

```
On Thu, 29 Jan 2009, Johannes Schindelin wrote:

> we already have a distinction between what is called from scripts vs from 
> humans: plumbing vs porcelain.  So you can set the defaults for porcelain as 
> much as you want, but please leave plumbing alone.

May we consider "git diff" Porcelain and "git diff-{files,index,tree}" plumbing?

```

## Nanako Shiraishi, 2009-01-29 21:07

Subject: Re: diff settings
Message-ID: <20090130060742.6117@nanako3.lavabit.com>
URL: https://gitlist.dev/e/20090130060742.6117%40nanako3.lavabit.com
In-Reply-To: <alpine.GSO.2.00.0901291044280.23065@kiwi.cs.ucla.edu>

```
Quoting Keith Cascio <keith@CS.UCLA.EDU>:

> On Thu, 29 Jan 2009, Johannes Schindelin wrote:
>
>> we already have a distinction between what is called from scripts vs from 
>> humans: plumbing vs porcelain.  So you can set the defaults for porcelain as 
>> much as you want, but please leave plumbing alone.
>
> May we consider "git diff" Porcelain and "git diff-{files,index,tree}" plumbing?

Sure we may. To see the list of commands with categories, you can consult

http://www.kernel.org/pub/software/scm/git/docs/

Junio, I think you could have stated this a bit more clearly in your message

http://thread.gmane.org/gmane.comp.version-control.git/107069/focus=107165

to avoid confusion, especially when you know you are talking to somebody new to git.

-- 
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/

```

## Ted Pavlic, 2009-01-31 19:47

Subject: Re: diff settings
Message-ID: <4984AACD.20600@tedpavlic.com>
URL: https://gitlist.dev/e/4984AACD.20600%40tedpavlic.com
In-Reply-To: <alpine.GSO.2.00.0901310750470.5437@kiwi.cs.ucla.edu>

```
> Thank you for alerting us to the Hg design.  I can appreciate the elegance of
> it, and I'm always in favor of the most general possible implementation.  But
> there is a subtle difference between diff.primer and primer.diff.

As I already discussed, Mercurial has both "diff.primer" and 
"primer.diff" precisely because "diff" settings affects so many Hg commands.

In particular, in my .hgrc, I have:

[diff]
git = 1

which causes all Mercurial commands that need to generate a diff to use 
gitdiff rather than truediff. However, if I *wanted* to apply a set of 
flags to a particular command, I could (using the equivalent "git" 
commands)...

[defaults]
pull = --rebase
commit = -a
format-patch = -M

So I see a purpose for both *.defaults and defaults.*. Of course, 
aliases are also nice (IIRC, Mercurial doesn't have "aliases", but I 
could be wrong). Mercurial users are very happy with having both 
available. I imagine git people would be too.

--Ted


-- 
Ted Pavlic <ted@tedpavlic.com>

   Please visit my ALS association page:
         http://web.alsa.org/goto/tedpavlic
   My family appreciates your support in the fight to defeat ALS.

```

## Keith Cascio, 2009-01-31 23:10

Subject: Re: diff settings
Message-ID: <alpine.GSO.2.00.0901311507350.10805@kiwi.cs.ucla.edu>
URL: https://gitlist.dev/e/alpine.GSO.2.00.0901311507350.10805%40kiwi.cs.ucla.edu
In-Reply-To: <4984AACD.20600@tedpavlic.com>

```
On Sat, 31 Jan 2009, Ted Pavlic wrote:

> As I already discussed, Mercurial has both "diff.primer" and "primer.diff" 
> precisely because "diff" settings affects so many Hg commands.

Yes I remember you did mention that.

> In particular, in my .hgrc, I have:
> [diff]
> git = 1
> which causes all Mercurial commands that need to generate a diff to use
> gitdiff rather than truediff. However, if I *wanted* to apply a set of flags
> to a particular command, I could (using the equivalent "git" commands)...
> [defaults]
> pull = --rebase
> commit = -a
> format-patch = -M
> So I see a purpose for both *.defaults and defaults.*. Of course, aliases are 
> also nice (IIRC, Mercurial doesn't have "aliases", but I could be wrong). 
> Mercurial users are very happy with having both available. I imagine git 
> people would be too.

I like it!  I'm all for it.  Perfect opportunity for future work.  In fact, I 
think I already glanced at the part of the code that's the right place to make 
that stuff happen.

                                      -- Keith

```
