Re: Implementing branch attributes in git config
- From
Junio C Hamano <junkio@cox.net>
- Date
- May 9, 2006, 00:54 UTC
- Message-ID
- <7virogc90u.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.64.0605081731440.3718@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
Show 35 quoted lines
> On Mon, 8 May 2006, sean wrote: >> >> One option, which I don't really like and comes with its own set of >> problems, would be to do something like: >> >> [branch1] >> streetname = "p4/BrAnCH" >> [branch2] >> streetname = "origin" > > You don't actually need that. > > We could easily do > > [branch] > name = "p4/BrAnCH" > url = git://git.kernel.org/... > pull = master > > ; > ; Repeating the "[branch]" section here isn't > ; needed, but doesn't hurt either, and is > ; more readable > ; > [branch] > name = "origin" > url = ... > pull = ... > > because the config file is always parsed linearly, and just > trigger on "branch.name", and keep that around when parsing > anything else. > > The problem with _that_ is that "git repo-config" can't add this kind of > setup sanely: it doesn't understand that kind of statefulness.
Wait a minute... Statefulness is not the issue, I think.
How would you tell your updated repo-config what to update and what to look up?
- I want the url for branch whose name is "origin"
- I want to fetch their "for-linus" branch when fetching
from the branch whose name is "jgarzik" from now on.In these query and update, you _are_ naming the branch with name="xxx"; you just made "name" a special attribute.
Now, how would that compare with:
[branch.jgarzik]
url = git://git.kernel.org/...
fetch = for-linusor
[branch."JGarzik"]
url = git://git.kernel.org/...
fetch = for-linusI would say if we are grouping things together, if we can give name to each group, _and_ if we are going to refer to the group with its name, we are better off making the groups into distinct sections _and_ make the syntax obvious that what name refers to the section. I think [branch.jgarzik] syntax is more obvious than your example where "name =" line is implicitly used as a keyword to differenciate multiple occurrences of [branch] sections.
Having said that, perhaps you have something more elaborate in mind, e.g.
repo-config --get branch.url where name = 'origin' repo-config --get branch.name where url like 'git://%' repo-config branch.url 'git://git.kernel.org/...' where name = foo
;-) ;-) ;-) ??? If that is what you are after, then I agree your syntax is more generic and suitable. But otherwise I fail to see its point.
On a related topic, I have always been torn about the "for" convention. While I think it was a cute hack, it would break quite badly once we start doing anything complex.
[branch]
url = git://git.kernel.org/... for jgarzik
fetch = for-linus for jgarzik
proxy = none url = git://git.kernel.org/... for torvalds
fetch = master for torvalds