diff --git a/branch.c b/branch.c index 4377ce2fb1..7404597678 100644 --- a/branch.c +++ b/branch.c @@ -181,21 +181,25 @@ int read_branch_desc(struct strbuf *buf, const char *branch_name) int validate_new_branchname(const char *name, struct strbuf *ref, int force, int attr_only) { + const char *head; + if (strbuf_check_branch_ref(ref, name)) die(_("'%s' is not a valid branch name."), name); if (!ref_exists(ref->buf)) return 0; - else if (!force && !attr_only) - die(_("A branch named '%s' already exists."), ref->buf + strlen("refs/heads/")); - if (!attr_only) { - const char *head; + if (attr_only) + return 1; + + if (!force) + die(_("A branch named '%s' already exists."), + ref->buf + strlen("refs/heads/")); + + head = resolve_ref_unsafe("HEAD", 0, NULL, NULL); + if (!is_bare_repository() && head && !strcmp(head, ref->buf)) + die(_("Cannot force update the current branch.")); - head = resolve_ref_unsafe("HEAD", 0, NULL, NULL); - if (!is_bare_repository() && head && !strcmp(head, ref->buf)) - die(_("Cannot force update the current branch.")); - } return 1; }