From: Junio C Hamano Date: Tue, 28 Nov 2017 04:41:49 +0000 (+0900) Subject: Merge branch 'jc/branch-name-sanity' X-Git-Tag: v2.16.0-rc0~89 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/16169285f1e63f6a3d9ec10e48f55d6825d3156b 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() --- 16169285f1e63f6a3d9ec10e48f55d6825d3156b diff --cc sha1_name.c index 9a2d5caf3b,67961d6e47..611c7d24dd --- a/sha1_name.c +++ b/sha1_name.c @@@ -1434,13 -1331,20 +1434,23 @@@ void strbuf_branchname(struct strbuf *s int strbuf_check_branch_ref(struct strbuf *sb, const char *name) { - strbuf_branchname(sb, name, INTERPRET_BRANCH_LOCAL); + if (startup_info->have_repository) + 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); }