diff options
author | nulltoken <emeric.fermas@gmail.com> | 2013-05-12 14:16:13 +0200 |
---|---|---|
committer | Carlos MartÃn Nieto <cmn@dwim.me> | 2013-11-23 13:32:25 +0100 |
commit | 92f95a170c76ffde80010cbbd6b03c0bf8dded1d (patch) | |
tree | 7cd6282b7d6a42b175b92abc39433598e0ad0bf6 /src/refs.c | |
parent | a2e873d1a15df03d7ecfac2a1bec56cf66b8cc40 (diff) | |
download | libgit2-92f95a170c76ffde80010cbbd6b03c0bf8dded1d.tar.gz |
refs: Centralize reference creation logic
Diffstat (limited to 'src/refs.c')
-rw-r--r-- | src/refs.c | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/src/refs.c b/src/refs.c index 472a79890..7b4730cd8 100644 --- a/src/refs.c +++ b/src/refs.c @@ -335,6 +335,8 @@ static int reference__create( git_reference *ref = NULL; int error = 0; + assert(repo && name); + if (ref_out) *ref_out = NULL; @@ -347,10 +349,29 @@ static int reference__create( return error; if (oid != NULL) { + git_odb *odb; + assert(symbolic == NULL); - ref = git_reference__alloc(normalized, oid, NULL); + + /* Sanity check the reference being created - target must exist. */ + if ((error = git_repository_odb__weakptr(&odb, repo)) < 0) + return error; + + if (!git_odb_exists(odb, oid)) { + giterr_set(GITERR_REFERENCE, + "Target OID for the reference doesn't exist on the repository"); + return -1; + } + + ref = git_reference__alloc(name, oid, NULL); } else { - ref = git_reference__alloc_symbolic(normalized, symbolic); + char normalized_target[GIT_REFNAME_MAX]; + + if ((error = git_reference__normalize_name_lax( + normalized_target, sizeof(normalized_target), symbolic)) < 0) + return error; + + ref = git_reference__alloc_symbolic(name, normalized_target); } GITERR_CHECK_ALLOC(ref); @@ -375,20 +396,7 @@ int git_reference_create( const git_oid *oid, int force) { - git_odb *odb; - int error = 0; - - assert(repo && name && oid); - - /* Sanity check the reference being created - target must exist. */ - if ((error = git_repository_odb__weakptr(&odb, repo)) < 0) - return error; - - if (!git_odb_exists(odb, oid)) { - giterr_set(GITERR_REFERENCE, - "Target OID for the reference doesn't exist on the repository"); - return -1; - } + assert(oid); return reference__create(ref_out, repo, name, oid, NULL, force); } @@ -400,16 +408,9 @@ int git_reference_symbolic_create( const char *target, int force) { - char normalized[GIT_REFNAME_MAX]; - int error = 0; - - assert(repo && name && target); - - if ((error = git_reference__normalize_name_lax( - normalized, sizeof(normalized), target)) < 0) - return error; + assert(target); - return reference__create(ref_out, repo, name, NULL, normalized, force); + return reference__create(ref_out, repo, name, NULL, target, force); } int git_reference_set_target( |