diff options
author | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-09-30 11:37:53 +0200 |
---|---|---|
committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-09-30 11:56:37 +0200 |
commit | c128149315c67d52c4503e294bfbd2653e0a8307 (patch) | |
tree | 44b028d5a701d965d156ea3b08bbf33e561d276d | |
parent | 3665ba8eeb4f8b2546517cd208e940b128dd8a46 (diff) | |
download | libgit2-c128149315c67d52c4503e294bfbd2653e0a8307.tar.gz |
refs: propagate EEXISTS
Indicate whether the error comes from the ref already existing or
elsewhere. We always perform the check and this lets the user write
more concise code.
-rw-r--r-- | src/refs.c | 10 | ||||
-rw-r--r-- | tests-clar/refs/create.c | 15 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/refs.c b/src/refs.c index 693870a0b..903acccbb 100644 --- a/src/refs.c +++ b/src/refs.c @@ -1199,6 +1199,7 @@ int git_reference_create_symbolic( { char normalized[GIT_REFNAME_MAX]; git_reference *ref = NULL; + int error; if (git_reference__normalize_name_lax( normalized, @@ -1206,8 +1207,8 @@ int git_reference_create_symbolic( name) < 0) return -1; - if (reference_can_write(repo, normalized, NULL, force) < 0) - return -1; + if ((error = reference_can_write(repo, normalized, NULL, force)) < 0) + return error; if (reference_alloc(&ref, repo, normalized) < 0) return -1; @@ -1236,6 +1237,7 @@ int git_reference_create_oid( const git_oid *id, int force) { + int error; git_reference *ref = NULL; char normalized[GIT_REFNAME_MAX]; @@ -1245,8 +1247,8 @@ int git_reference_create_oid( name) < 0) return -1; - if (reference_can_write(repo, normalized, NULL, force) < 0) - return -1; + if ((error = reference_can_write(repo, normalized, NULL, force)) < 0) + return error; if (reference_alloc(&ref, repo, name) < 0) return -1; diff --git a/tests-clar/refs/create.c b/tests-clar/refs/create.c index af5b203a3..bf234bc60 100644 --- a/tests-clar/refs/create.c +++ b/tests-clar/refs/create.c @@ -147,3 +147,18 @@ void test_refs_create__oid_unknown(void) /* Ensure the reference can't be looked-up... */ cl_git_fail(git_reference_lookup(&looked_up_ref, g_repo, new_head)); } + +void test_refs_create__propagate_eexists(void) +{ + int error; + git_oid oid; + git_reference *ref; + + /* Make sure it works for oid and for symbolic both */ + git_oid_fromstr(&oid, current_master_tip); + error = git_reference_create_oid(&ref, g_repo, current_head_target, &oid, false); + cl_assert(error == GIT_EEXISTS); + + error = git_reference_create_symbolic(&ref, g_repo, "HEAD", current_head_target, false); + cl_assert(error == GIT_EEXISTS); +} |