Re: [RFC PATCH] config: learn the "onbranch:" includeIf condition
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- May 31, 2019, 17:23 UTC
- Message-ID
- <nycvar.QRO.7.76.6.1905311918510.44@tvgsbejvaqbjf.bet>
- In-Reply-To
- <20190531131626.GA30114@archbookpro.localdomain>
Hi Denton,
On Fri, 31 May 2019, Denton Liu wrote:
Show 25 quoted lines
> On Fri, May 31, 2019 at 02:58:30PM +0200, Johannes Schindelin wrote: > > > 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"?
Yes, precisely.
I would use this for the "ever-green" branches of Git for Windows, i.e. the branches that are continuously rebasing Git for Windows' branch thicket on top of maint, master, next & pu. Those are called `shears/maint`, `shears/master`, etc (for historical reasons) in https://github.com/git-for-windows/git.
Show 29 quoted lines
> > > 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.
That strikes me as a different use case than `includeIf`. I could imagine that you'd want a setting like `formatpatch.detecttargetbranch = auto` or some such that would pick up the `format.bar*` settings if there was *one* rev argument, and it was a commit range (or a tip commit), *and* it obviously referred to a single target branch.
It's just a scenario that is *very* specific to `git format-patch`.
For example, I would not, ever, want `git log ..next` to pick up a config specific to `next` just because I mentioned a commit range with `range` as the tip to start from.
Ciao, Dscho