Merge branch 'jc/branch-name-sanity'

"git branch" and "git checkout -b" are now forbidden from creating
a branch whose name is "HEAD".

* jc/branch-name-sanity:
  builtin/branch: remove redundant check for HEAD
  branch: correctly reject refs/heads/{-dash,HEAD}
  branch: split validate_new_branchname() into two
  branch: streamline "attr_only" handling in validate_new_branchname()
This commit is contained in:
Junio C Hamano
2017-11-28 13:41:49 +09:00
6 changed files with 106 additions and 43 deletions

View File

@ -1438,9 +1438,19 @@ int strbuf_check_branch_ref(struct strbuf *sb, const char *name)
strbuf_branchname(sb, name, INTERPRET_BRANCH_LOCAL);
else
strbuf_addstr(sb, name);
if (name[0] == '-')
return -1;
/*
* This splice must be done even if we end up rejecting the
* name; builtin/branch.c::copy_or_rename_branch() still wants
* to see what the name expanded to so that "branch -m" can be
* used as a tool to correct earlier mistakes.
*/
strbuf_splice(sb, 0, 0, "refs/heads/", 11);
if (*name == '-' ||
!strcmp(sb->buf, "refs/heads/HEAD"))
return -1;
return check_refname_format(sb->buf, 0);
}