From: Ramkumar Ramachandra Date: Mon, 10 Jun 2013 08:43:45 GMT Subject: Re: [PATCH 2/4] push: make upstream, simple work with pushdefault Message-ID: In-Reply-To: <7vip1moq3k.fsf@alter.siamese.dyndns.org> Junio C Hamano wrote: > I am not sure what you mean by artificial. By artificial, I mean that the precondition is absolutely unnecessary for the code following it to work. The precondition was introduced in a separate commit, specifically denying one usecase because the author (you) thought that made sense. > If you have push.default set upstream or simple, then a push run > while on the branch 'foo' will figure out what happens when you do a > fetch by looking at 'branch.foo.merge' to find the branch we are set > to integrate from 'branch.foo.remote' remote. The simple further > says that branch name must be the same as 'foo'. I understand this perfectly well, as evidenced by the tests I've written out in 4/4. > And that is what setup_push_UPSTREAM() is designed to do. Rejecting > a call that breaks the precondition is perfectly the right thing to > do: if you set to push to "upstream" and if you are trying to push > to a different remote, for example. > > The triangle topic changed the precondition without updating the > logic to check it, which was the bug, not the original check. Did I claim otherwise? :) The topic is about fixing a bug introduced by rr/triangle. > I actually am OK with 'upstream' that rejects triangular, while > making 'simple' do something different [*1*]. Okay, so you haven't outlined a solution either. Like I said in the cover-letter, I've spent hours breaking my head and can't figure out a better solution. The bigger problem is that upstream/ simple were designed with only central workflows in mind. How do we deal with it now? Yes, upstream/ simple work only when @{u} resolves, and I haven't changed this (because we don't have a well-defined meaning for what branch..merge without a branch..remote means). My argument is very simple: no push.default mode should not dictate the push destination; only the push refspec. What makes sense to the user is an upstream/ simple that works as expected with pushdefault: do the tests I've outlined in 4/4 not make sense? *scratches head* I don't understand why upstream/ simple should _not_ push to a different destination from the one being merged from. I'll repeat: push source/ destination is orthogonal to push refspec, and push.default modes dictate the refspec.