From 3548fcf5627c56cbbddaf82715e198ed8e4c7873 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Thu, 11 Oct 2012 14:00:26 +0200 Subject: [PATCH 1/4] refs: propagate EEXISTS upon renaming --- src/refs.c | 4 ++-- tests-clar/refs/rename.c | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/refs.c b/src/refs.c index 9dc422e1b..1d73b2677 100644 --- a/src/refs.c +++ b/src/refs.c @@ -1357,8 +1357,8 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force) normalization_flags) < 0) return -1; - if (reference_can_write(ref->owner, normalized, ref->name, force) < 0) - return -1; + if ((result = reference_can_write(ref->owner, normalized, ref->name, force)) < 0) + return result; /* Initialize path now so we won't get an allocation failure once * we actually start removing things. */ diff --git a/tests-clar/refs/rename.c b/tests-clar/refs/rename.c index 4b917ef6d..19bf875cd 100644 --- a/tests-clar/refs/rename.c +++ b/tests-clar/refs/rename.c @@ -337,3 +337,14 @@ void test_refs_rename__move_up(void) git_reference_free(ref); git_reference_free(looked_up_ref); } + +void test_refs_rename__propagate_eexists(void) +{ + git_reference *ref; + + cl_git_pass(git_reference_lookup(&ref, g_repo, packed_head_name)); + + cl_assert_equal_i(GIT_EEXISTS, git_reference_rename(ref, packed_test_head_name, 0)); + + git_reference_free(ref); +} From 62993b61586be9d838e52fef3b7e01ec3abd8c35 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Thu, 11 Oct 2012 14:08:32 +0200 Subject: [PATCH 2/4] branches: propagate EEXISTS upon creation --- src/branch.c | 9 ++++----- tests-clar/refs/branches/create.c | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/branch.c b/src/branch.c index 6d497b055..d0bd1c45b 100644 --- a/src/branch.c +++ b/src/branch.c @@ -77,12 +77,11 @@ int git_branch_create( if (git_buf_joinpath(&canonical_branch_name, GIT_REFS_HEADS_DIR, branch_name) < 0) goto cleanup; - if (git_reference_create_oid(&branch, repository, - git_buf_cstr(&canonical_branch_name), git_object_id(commit), force) < 0) - goto cleanup; + error = git_reference_create_oid(&branch, repository, + git_buf_cstr(&canonical_branch_name), git_object_id(commit), force); - *ref_out = branch; - error = 0; + if (!error) + *ref_out = branch; cleanup: git_object_free(commit); diff --git a/tests-clar/refs/branches/create.c b/tests-clar/refs/branches/create.c index fe72d4708..9026b0de1 100644 --- a/tests-clar/refs/branches/create.c +++ b/tests-clar/refs/branches/create.c @@ -50,7 +50,7 @@ void test_refs_branches_create__can_not_create_a_branch_if_its_name_collide_with { retrieve_known_commit(&target, repo); - cl_git_fail(git_branch_create(&branch, repo, "br2", target, 0)); + cl_assert_equal_i(GIT_EEXISTS, git_branch_create(&branch, repo, "br2", target, 0)); } void test_refs_branches_create__can_force_create_over_an_existing_branch(void) From 6251de1d17bdc039cef61d333236b6f42e0d653d Mon Sep 17 00:00:00 2001 From: nulltoken Date: Thu, 11 Oct 2012 14:09:27 +0200 Subject: [PATCH 3/4] branches: cover EEXISTS propagation upon moving --- tests-clar/refs/branches/move.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests-clar/refs/branches/move.c b/tests-clar/refs/branches/move.c index 9ab7da4e1..62b6042c6 100644 --- a/tests-clar/refs/branches/move.c +++ b/tests-clar/refs/branches/move.c @@ -45,7 +45,7 @@ void test_refs_branches_move__can_move_a_local_branch_to_a_partially_colliding_n void test_refs_branches_move__can_not_move_a_branch_if_its_destination_name_collide_with_an_existing_one(void) { - cl_git_fail(git_branch_move(ref, "master", 0)); + cl_assert_equal_i(GIT_EEXISTS, git_branch_move(ref, "master", 0)); } void test_refs_branches_move__can_not_move_a_non_branch(void) From b73200c1ed55941bf165e1f10b5e42c7608d3f18 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Thu, 11 Oct 2012 14:15:40 +0200 Subject: [PATCH 4/4] tags: cover EEXISTS propagation upon creation --- tests-clar/object/tag/write.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests-clar/object/tag/write.c b/tests-clar/object/tag/write.c index cb196b64e..10d04797f 100644 --- a/tests-clar/object/tag/write.c +++ b/tests-clar/object/tag/write.c @@ -77,7 +77,7 @@ void test_object_tag_write__overwrite(void) /* create signature */ cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60)); - cl_git_fail(git_tag_create( + cl_assert_equal_i(GIT_EEXISTS, git_tag_create( &tag_id, /* out id */ g_repo, "e90810b", @@ -166,7 +166,7 @@ void test_object_tag_write__lightweight_over_existing(void) git_oid_fromstr(&target_id, tagged_commit); cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT)); - cl_git_fail(git_tag_create_lightweight( + cl_assert_equal_i(GIT_EEXISTS, git_tag_create_lightweight( &object_id, g_repo, "e90810b",