From 4ba23be1e5bd480d9f6bb3eb212d5a3409fa88bd Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 6 Oct 2012 12:20:13 +0200 Subject: [PATCH] branch: deploy git_branch_is_head() --- src/branch.c | 29 +++++++++-------------------- src/refs.c | 9 ++------- 2 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/branch.c b/src/branch.c index 3cee956f0..6d497b055 100644 --- a/src/branch.c +++ b/src/branch.c @@ -92,7 +92,7 @@ cleanup: int git_branch_delete(git_reference *branch) { - git_reference *head = NULL; + int is_head; assert(branch); @@ -102,27 +102,16 @@ int git_branch_delete(git_reference *branch) return -1; } - if (git_reference_lookup(&head, git_reference_owner(branch), GIT_HEAD_FILE) < 0) { - giterr_set(GITERR_REFERENCE, "Cannot locate HEAD."); - goto on_error; + if ((is_head = git_branch_is_head(branch)) < 0) + return is_head; + + if (is_head) { + giterr_set(GITERR_REFERENCE, + "Cannot delete branch '%s' as it is the current HEAD of the repository.", git_reference_name(branch)); + return -1; } - if ((git_reference_type(head) == GIT_REF_SYMBOLIC) - && (strcmp(git_reference_target(head), git_reference_name(branch)) == 0)) { - giterr_set(GITERR_REFERENCE, - "Cannot delete branch '%s' as it is the current HEAD of the repository.", git_reference_name(branch)); - goto on_error; - } - - if (git_reference_delete(branch) < 0) - goto on_error; - - git_reference_free(head); - return 0; - -on_error: - git_reference_free(head); - return -1; + return git_reference_delete(branch); } typedef struct { diff --git a/src/refs.c b/src/refs.c index 3b33a3201..9dc422e1b 100644 --- a/src/refs.c +++ b/src/refs.c @@ -15,6 +15,7 @@ #include #include #include +#include GIT__USE_STRMAP; @@ -1345,9 +1346,6 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force) char normalized[GIT_REFNAME_MAX]; bool should_head_be_updated = false; - const char *head_target = NULL; - git_reference *head = NULL; - normalization_flags = ref->flags & GIT_REF_SYMBOLIC ? GIT_REF_FORMAT_ALLOW_ONELEVEL : GIT_REF_FORMAT_NORMAL; @@ -1370,12 +1368,9 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force) /* * Check if we have to update HEAD. */ - if (git_repository_head(&head, ref->owner) < 0) + if ((should_head_be_updated = git_branch_is_head(ref)) < 0) goto cleanup; - should_head_be_updated = !strcmp(git_reference_name(head), ref->name); - git_reference_free(head); - /* * Now delete the old ref and remove an possibly existing directory * named `new_name`. Note that using the internal `reference_delete`