Re: [PATCH 4/5] Be more specific if upstream branch is not fetched
- From
Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
- Date
- Apr 12, 2012, 09:15 UTC
- Message-ID
- <4F869D37.1050508@in.waw.pl>
- In-Reply-To
- <20120412053017.GA27369@sigill.intra.peff.net>
On 04/12/2012 07:30 AM, Jeff King wrote:
Show 23 quoted lines
> On Wed, Apr 11, 2012 at 06:17:14PM +0200, Zbigniew Jędrzejewski-Szmek wrote:
>
>> If the branch configured as upstream was missing from
>> remote.<remote>.fetch, git said "Upstream branch not found".
>> We can be more helpful, and separate the cases when upstream
>> is not configured, and when it is configured, but specific
>> branch is not fetched.
>
> I very much like the direction of this series, but I found this one a
> little confusing. If you have upstream config, but the configured merge
> branch is not part of the remote's refspecs, what does it mean? You
> would be able to "git pull", but you would not have a remote tracking
> branch representing what the remote has. So this message:
>
>> - return error("No upstream branch found for '%s'", upstream->name);
>> + if (!upstream->merge)
>> + return error("No upstream configured for branch '%s'",
>> + upstream->name);
>> + return error("Upstream branch '%s' not fetched from remote '%s'",
>> + upstream->merge[0]->src, upstream->remote_name);
>
> doesn't seem right to me. The upstream branch can be fetched just fine;
> it is simply that we do not maintain a tracking branch for it.Hi,
maybe I'm missing something, but I think that git will not fetch branches (or commits) which are not part of remote's refspecs. The fact that we do not have a remote-tracking branch would be secondary.
% git init repo6 Initialized empty Git repository in /var/tmp/repo6/.git/ % cd repo6 % git commit -m init --allow-empty [master (root-commit) 46c16de] init % git checkout -b side % git commit -m side --allow-empty [side 6a0f0e9] side % git clone . clone Cloning into 'clone'... done. % cd clone % git config remote.origin.fetch refs/heads/master:refs/remotes/master % git fetch -v From /var/tmp/repo6/. * [new branch] master -> master % git show 6a0f0e9 fatal: ambiguous argument '6a0f0e9': unknown revision or path not in the working tree. Use '--' to separate paths from revisions
The scenario leading to this error message would be:
1. user clones
2. user sets remote's refspec to avoid fetching too much stuff
3. user creates a side branch
4. user edits .git/config by hand to create [branch "side"]
based on [branch "master]. (I think that this is a pretty common thing to do.)
5. side@{u} is not fetchedA second scenario:
Actually, the fact that we have a remote tracking branch is ignored, if it is missing from the remote's refspec. (Such situation will arise if the remote's refspec is set after the remote branch was fetched.)
% git branch -a
master
* side
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/side
% git show side@{u}
error: Upstream branch 'refs/heads/origin/side' not fetched from remote 'origin'
error: Upstream branch 'refs/heads/origin/side' not fetched from remote 'origin'
fatal: ambiguous argument 'side@{u}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
% git config remote.origin.fetch
refs/heads/master:refs/remotes/master
% tail -3 .git/config
[branch "side"]
remote = origin
merge = refs/heads/origin/sideSo I think that the proposed error message is OK.
Zbyszek
Show 12 quoted lines
> Having worked it out in my head, I think that is maybe even what you > meant, but reading the message the first time left me very confused. > I'm not sure what a better wording would be, though. I was thinking > something like: > > Upstream branch '%s' is not stored as a remote-tracking branch. > > or something, but I know we have had trouble with the term "tracking > branch" in the past. Maybe there is a less loaded term. > > -Peff >