summaryrefslogtreecommitdiff
path: root/src/refs.c
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2013-05-12 14:16:13 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2013-11-23 13:32:25 +0100
commit92f95a170c76ffde80010cbbd6b03c0bf8dded1d (patch)
tree7cd6282b7d6a42b175b92abc39433598e0ad0bf6 /src/refs.c
parenta2e873d1a15df03d7ecfac2a1bec56cf66b8cc40 (diff)
downloadlibgit2-92f95a170c76ffde80010cbbd6b03c0bf8dded1d.tar.gz
refs: Centralize reference creation logic
Diffstat (limited to 'src/refs.c')
-rw-r--r--src/refs.c51
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(