Jeff King [off-list ref] writes:
I suspect there are a lot of other places that are less clear cut. E.g.,
I think just:
git branch foo bar
will put "foo" through the same interpretation. So you could do:
git branch -f @{-1} bar
Is that insane? Maybe. But it does work now.
No, it _is_ very sensible, so is "git checkout -B @{-1} <someplace>"
Perhaps interpret-branch-name that does not error out when given "@"
is what is broken? I suspect that calling interpret_empty_at() from
that function is fundamentally flawed. The "@" end user types never
means refs/heads/HEAD, and HEAD@{either reflog or -1} would not mean
anything that should be taken as a branch_name, either.
So perhaps what interpret_empty_at() does is necessary for the "four
capital letters is too many to type, so just type one key while
holding a shift", but it should be called from somewhere else, and
not from interpret_branch_name()?
On Mon, Feb 27, 2017 at 01:19:29PM -0800, Junio C Hamano wrote:
Jeff King [off-list ref] writes:
quoted
I suspect there are a lot of other places that are less clear cut. E.g.,
I think just:
git branch foo bar
will put "foo" through the same interpretation. So you could do:
git branch -f @{-1} bar
Is that insane? Maybe. But it does work now.
No, it _is_ very sensible, so is "git checkout -B @{-1} <someplace>"
Perhaps interpret-branch-name that does not error out when given "@"
is what is broken? I suspect that calling interpret_empty_at() from
that function is fundamentally flawed. The "@" end user types never
means refs/heads/HEAD, and HEAD@{either reflog or -1} would not mean
anything that should be taken as a branch_name, either.
So perhaps what interpret_empty_at() does is necessary for the "four
capital letters is too many to type, so just type one key while
holding a shift", but it should be called from somewhere else, and
not from interpret_branch_name()?
I think _most_ of interpret_branch_name() is in the same boat. The
"@{upstream}" mark is not likely to give you a branch in refs/heads
either.
So in practice, I think strbuf_check_branch_ref() could probably get by
with just calling interpret_nth_prior_checkout(). Or if you prefer, to
rip everything out of interpret_branch_name() except that. :) But that
other stuff has to go somewhere, and there are some challenges with the
recursion from reinterpret().
The "other" stuff could sometimes be useful, I guess. It's not _always_
wrong to do:
git branch -f @{upstream} foo
It depends on what your @{upstream} resolves to. Switching to just using
interpret_nth_prior_checkout() would break the case when it resolves to
a local branch. I'm not sure if we're OK with that or not. If we want to
keep all the existing cases working, I think we need something like the
"not_in_refs_heads" patch I posted elsewhere.
-Peff