Re: [PATCH v2 6/9] branch: display publish branch
- From
Jeff King <peff@peff.net>
- Date
- Apr 11, 2014, 11:17 UTC
- Message-ID
- <20140411111750.GA28858@sigill.intra.peff.net>
- In-Reply-To
- <53471d0b4c8dc_d696b12f08c@nysa.notmuch>
On Thu, Apr 10, 2014 at 05:36:59PM -0500, Felipe Contreras wrote:
Show 6 quoted lines
> > I noticed that this only picks up a publish-branch if
> > branch.*.pushremote is configured. What happened to the case when
> > remote.pushdefault is configured?
>
> What happens when branch.*.remote is not configured for @{upstream}? The same
> thing.I don't know if that is a good comparison.
In other threads, the discussed meaning of @{publish} was something like "the tracking branch of the ref you would push to if you ran 'git push' without arguments".
That is consistent with @{upstream} being "the tracking branch of the ref you would pull from with 'git pull'". But "git pull" without a branch.*.remote will do nothing, so "what pull would do" is the same as "what you have configured in your branch.*.remote".
Whereas "git push" does not depend on having branch.*.pushremote configured. Its behavior is based on push.default and push refspecs, so "what push would do" must take that into account.
Show 5 quoted lines
> It might be useful to visualize what would be the name of the branch when
> pushing it (without a refspec) even if the publish branch hasn't been
> configured, but I think the code would be much more coplicated, and it would
> break symetry with @{upstream}, besides, the user can just do 'git push -p
> branch', and from that moment on it will be visible.It is more complicated (see the patches that Junio had at jk/branch-at-publish), but I think it is more likely to do what the user expects.
For instance, it looks like your @{publish} requires config like:[branch "master"] pushremote = foo push = refs/heads/bar
to operate. Setting "pushremote" affects what "git push" does; it will go to the "foo" remote. But the branch.master.push setting does not do anything to "git push". Only a push refspec (or push.default setting) will change that. So the "branch.*.push" must be kept in sync manually (perhaps by running "git push -p").
Whereas if @{publish} means "where you would push to", then "branch.*.push" does not need to exist at all. The values can be taken automatically from the other push settings.
-Peff
PS I first tried just setting "branch.master.pushremote" without setting "branch.master.push". This results in a segfault, as branch_get() assumes that push_name is always set and tries to xstrdup() it.