Subject: Re: [RFC PATCH] config: learn the "onbranch:" includeIf condition

From: Denton Liu <[email-masked]>
Date: Fri, 31 May 2019 09:16:26 -0400

Hi Johannes,

On Fri, May 31, 2019 at 02:58:30PM +0200, Johannes Schindelin wrote:
> Hi,
> 
> On Thu, 30 May 2019, Denton Liu wrote:
> 
> > Currently, if a user wishes to have individual settings per branch, they
> > are required to manually keep track of the settings in their head and
> > manually set the options on the command-line or change the config at
> > each branch.
> >
> > Teach config the "onbranch:" includeIf condition so that it can
> > conditionally include configuration files if the branch is checked out
> > in the current worktree.
> 
> What a coincidence. I actually wished for something like this, to have
> branch-specific aliases.
> 
> However, I would need this to handle patterns (via `wildmatch()`?) rather
> than branch names.

Do you mean that we should be able to match a branch by pattern? So, for
example, if we had

	[includeIf "onbranch:mas*"]

we'd match if we were on "master"?

> 
> > I decided to go ahead and implement the includeIf onbranch semantics for
> > fun. For completeness, I'm sending it to the list but I'm not really
> > sure if this should get merged, since I don't really have a use-case for
> > this, especially if we go the branch-specific format-patch config route.
> >
> > Another thing to note is that this change doesn't completely cover all
> > the use-cases that the branch-specific format-patch does. In particular,
> > if I run
> >
> > 	$ git checkout foo
> > 	$ git format-patch master..bar
> >
> > with the `format.bar.*`, we'd get bar-specific configs, whereas with
> > `includeIf "onbranch:bar"`, we'd fail to include bar-specific configs
> > and, more dangerously, we'd be including foo's configs.
> 
> I actually think that this is fine. "on branch" means that you are on the
> specified branch, not that you merely mention the branch name on the
> command-line (in which case there would be the ambiguity "did the user
> mean `master` or `bar`?").

The reason why I brought this up as a use case was because currently,
when format-patch generates a cover letter, with the above, it'll use
bar's branch description to populate it even if "foo" is checked out. As
a result, when implementing the branch-specific format-patch stuff, I
wanted to make this consistent so that we wouldn't end up in a situation
where the cover letter has the branch's description but is missing its
Cc's.

> Ciao,
> Dscho