strbuf_check_ref_format(): expand only local branches
commit7d5c960bf6f98601dce992f1ffaf4c7ab932e6dc
authorJeff King <peff@peff.net>
Thu, 2 Mar 2017 08:23:14 +0000 (2 03:23 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Mar 2017 19:05:04 +0000 (2 11:05 -0800)
treee6a326da070df9f1a378400b4e58ef7839653a08
parent6b145e016aaf512d0026cbd2c78fa28476f043b4
strbuf_check_ref_format(): expand only local branches

This function asks strbuf_branchname() to expand any @-marks
in the branchname, and then we blindly stick refs/heads/ in
front of the result. This is obviously nonsense if the
expansion is "HEAD" or a ref in refs/remotes/.

The most obvious end-user effect is that creating or
renaming a branch with an expansion may have confusing
results (e.g., creating refs/heads/origin/master from
"@{upstream}" when the operation should be disallowed).

We can fix this by telling strbuf_branchname() that we are
only interested in local expansions. Any unexpanded bits are
then fed to check_ref_format(), which either disallows them
(in the case of "@{upstream}") or lets them through
("refs/heads/@" is technically valid, if a bit silly).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_name.c
t/t3204-branch-name-interpretation.sh