So, here is a cleaned up version, which ended up to be a 4-patch series. - The first two steps move code around to get rid of the "strbuf_" prefix from three misnamed helper functions that are more about refs than they are about string manipulation operations. We now have: - copy_branchname() that copies a branchname while applying interpret_branch_name() like @{-1} for previous branch, @{u} for upstream, etc. - check_branch_ref() and check_tag_ref() that are allowed to be a bit stricter than check_refname_format(), e.g., to reject "HEAD" as the name of a branch or a tag. - The third step updates a test that assumes HEAD can be usable as the name of a tag, but the breakage the test tries to protect is not specific to any tagname. - The final step then forbids "git tag" from using "HEAD" as the name of a tag. Junio C Hamano (4): refs: move ref name helpers around refs: drop strbuf_ prefix from helpers t5604: do not expect that HEAD is a valid tagname tag: "git tag" refuses to use HEAD as a tagname branch.c | 2 +- builtin/branch.c | 10 ++++---- builtin/check-ref-format.c | 2 +- builtin/checkout.c | 2 +- builtin/merge.c | 2 +- builtin/tag.c | 13 +---------- builtin/worktree.c | 8 +++---- gitweb/gitweb.perl | 2 +- object-name.c | 36 ----------------------------- refs.c | 47 ++++++++++++++++++++++++++++++++++++++ refs.h | 29 +++++++++++++++++++++++ strbuf.h | 22 ------------------ t/t5604-clone-reference.sh | 6 ++--- t/t7004-tag.sh | 6 +++++ 14 files changed, 100 insertions(+), 87 deletions(-) -- 2.47.1-514-g9b43e7ecc4