aboutsummaryrefslogtreecommitdiffstats
path: root/branch.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-08-28 21:19:31 -0700
committerJunio C Hamano <gitster@pobox.com>2011-08-28 21:19:31 -0700
commit1da6d98a9acd2db3902bf432a097771c76f4fd44 (patch)
treecccdbb4533c6998fbba362569906f24c9f4a87cc /branch.c
parent67c116bb26b4ee31889e5ee15d6a9d3b7e972b7b (diff)
parent587a9ee7da348f5e6696720d770d0e0da597827c (diff)
downloadgit-1da6d98a9acd2db3902bf432a097771c76f4fd44.tar.gz
Merge branch 'ci/forbid-unwanted-current-branch-update'
* ci/forbid-unwanted-current-branch-update: Show interpreted branch name in error messages Prevent force-updating of the current branch
Diffstat (limited to 'branch.c')
-rw-r--r--branch.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/branch.c b/branch.c
index d62cc0132c..478d82567d 100644
--- a/branch.c
+++ b/branch.c
@@ -135,6 +135,26 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
return 0;
}
+int validate_new_branchname(const char *name, struct strbuf *ref, int force)
+{
+ const char *head;
+ unsigned char sha1[20];
+
+ 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)
+ die("A branch named '%s' already exists.", ref->buf + strlen("refs/heads/"));
+
+ head = resolve_ref("HEAD", sha1, 0, NULL);
+ if (!is_bare_repository() && head && !strcmp(head, ref->buf))
+ die("Cannot force update the current branch.");
+
+ return 1;
+}
+
void create_branch(const char *head,
const char *name, const char *start_name,
int force, int reflog, enum branch_track track)
@@ -151,17 +171,11 @@ void create_branch(const char *head,
if (track == BRANCH_TRACK_EXPLICIT || track == BRANCH_TRACK_OVERRIDE)
explicit_tracking = 1;
- if (strbuf_check_branch_ref(&ref, name))
- die("'%s' is not a valid branch name.", name);
-
- if (resolve_ref(ref.buf, sha1, 1, NULL)) {
- if (!force && track == BRANCH_TRACK_OVERRIDE)
+ if (validate_new_branchname(name, &ref, force || track == BRANCH_TRACK_OVERRIDE)) {
+ if (!force)
dont_change_ref = 1;
- else if (!force)
- die("A branch named '%s' already exists.", name);
- else if (!is_bare_repository() && head && !strcmp(head, name))
- die("Cannot force update the current branch.");
- forcing = 1;
+ else
+ forcing = 1;
}
real_ref = NULL;