mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 23:26:39 +00:00
Merge pull request #903 from nulltoken/topic/peeling-duplication
branch: reduce code duplication
This commit is contained in:
commit
0b9174c621
28
src/branch.c
28
src/branch.c
@ -57,7 +57,6 @@ int git_branch_create(
|
|||||||
const git_object *target,
|
const git_object *target,
|
||||||
int force)
|
int force)
|
||||||
{
|
{
|
||||||
git_otype target_type = GIT_OBJ_BAD;
|
|
||||||
git_object *commit = NULL;
|
git_object *commit = NULL;
|
||||||
git_reference *branch = NULL;
|
git_reference *branch = NULL;
|
||||||
git_buf canonical_branch_name = GIT_BUF_INIT;
|
git_buf canonical_branch_name = GIT_BUF_INIT;
|
||||||
@ -66,27 +65,8 @@ int git_branch_create(
|
|||||||
assert(branch_name && target && ref_out);
|
assert(branch_name && target && ref_out);
|
||||||
assert(git_object_owner(target) == repository);
|
assert(git_object_owner(target) == repository);
|
||||||
|
|
||||||
target_type = git_object_type(target);
|
if (git_object_peel(&commit, (git_object *)target, GIT_OBJ_COMMIT) < 0)
|
||||||
|
return create_error_invalid("The given target does not resolve to a commit");
|
||||||
switch (target_type)
|
|
||||||
{
|
|
||||||
case GIT_OBJ_TAG:
|
|
||||||
if (git_tag_peel(&commit, (git_tag *)target) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (git_object_type(commit) != GIT_OBJ_COMMIT) {
|
|
||||||
create_error_invalid("The given target does not resolve to a commit");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GIT_OBJ_COMMIT:
|
|
||||||
commit = (git_object *)target;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return create_error_invalid("Only git_tag and git_commit objects are valid targets.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (git_buf_joinpath(&canonical_branch_name, GIT_REFS_HEADS_DIR, branch_name) < 0)
|
if (git_buf_joinpath(&canonical_branch_name, GIT_REFS_HEADS_DIR, branch_name) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -99,9 +79,7 @@ int git_branch_create(
|
|||||||
error = 0;
|
error = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (target_type == GIT_OBJ_TAG)
|
git_object_free(commit);
|
||||||
git_object_free(commit);
|
|
||||||
|
|
||||||
git_buf_free(&canonical_branch_name);
|
git_buf_free(&canonical_branch_name);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user