checkout: report upstream correctly even with loosely defined branch.*.merge
commit05e73682cd28eeaf6d949badefd85b94244fca3f
authorJunio C Hamano <gitster@pobox.com>
Tue, 14 Oct 2014 21:42:04 +0000 (14 14:42 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 14 Oct 2014 22:12:07 +0000 (14 15:12 -0700)
tree5ef371b5848c10f55af962ef2080c767711e3729
parent76f8611a5fb7e81c1bada0fb190d573a66fc03f6
checkout: report upstream correctly even with loosely defined branch.*.merge

When checking out a branch that is set to build on top of another
branch (often, a remote-tracking branch), "git checkout" reports how
your work relates to the other branch, e.g.

    Your branch is behind 'origin/master', and can be fast-forwarded.

Back when this feature was introduced, this was only done for
branches that build on remote-tracking branches, but 5e6e2b48 (Make
local branches behave like remote branches when --tracked,
2009-04-01) added support to give the same report for branches that
build on other local branches (i.e. branches whose branch.*.remote
variables are set to '.').  Unlike the support for the branches
building on remote-tracking branches, however, this did not take
into account the fact that branch.*.merge configuration is allowed
to record a shortened branch name.

When branch.*.merge is set to 'master' (not 'refs/heads/master'),
i.e. "my branch builds on the local 'master' branch", this caused
"git checkout" to report:

    Your branch is based on 'master', but the upstream is gone.

The upstream is our repository and is definitely not gone, so this
output is nonsense.

The fix is fairly obvious; just like the branch name is DWIMed when
"git pull" merges from the 'master' branch without complaint on such
a branch, the name of the branch the current branch builds upon
needs to be DWIMed the same way.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote.c
t/t2024-checkout-dwim.sh