diff --git a/src/pygit2/repository.c b/src/pygit2/repository.c index 3f31805..14393fa 100644 --- a/src/pygit2/repository.c +++ b/src/pygit2/repository.c @@ -661,7 +661,7 @@ Repository_create_reference(Repository *self, PyObject *args, PyObject* keywds) git_reference *c_reference; char *c_name, *c_target; git_oid oid; - int err, symbolic = 0, force = 0; + int err = 0, symbolic = 0, force = 0; static char *kwlist[] = {"name", "source", "force", "symbolic", NULL}; @@ -669,7 +669,14 @@ Repository_create_reference(Repository *self, PyObject *args, PyObject* keywds) &c_name, &py_obj, &force, &symbolic)) return NULL; - if(symbolic) { + if(!symbolic) { + err = py_str_to_git_oid_expand(self->repo, py_obj, &oid); + if (err < 0) { + return Error_set(err); + } + + err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, force); + } else { #if PY_MAJOR_VERSION == 2 c_target = PyString_AsString(py_obj); #else @@ -680,12 +687,6 @@ Repository_create_reference(Repository *self, PyObject *args, PyObject* keywds) err = git_reference_create_symbolic(&c_reference, self->repo, c_name, c_target, force); - } else { - err = py_str_to_git_oid_expand(self->repo, py_obj, &oid); - if (err < 0) - return Error_set(err); - - err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, force); } if (err < 0) diff --git a/test/test_refs.py b/test/test_refs.py index 56e918b..5ba77e1 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -175,9 +175,11 @@ class ReferencesTest(utils.RepoTestCase): reference = self.repo.lookup_reference('refs/tags/version1') self.assertEqual(reference.hex, LAST_COMMIT) - self.assertRaises(GitError, self.repo.create_reference, + # try to create existing reference + self.assertRaises(ValueError, self.repo.create_reference, 'refs/tags/version1', LAST_COMMIT) + # try to create existing reference with force reference = self.repo.create_reference('refs/tags/version1', LAST_COMMIT, force=True) self.assertEqual(reference.hex, LAST_COMMIT) @@ -191,9 +193,12 @@ class ReferencesTest(utils.RepoTestCase): self.assertEqual(reference.type, GIT_REF_SYMBOLIC) self.assertEqual(reference.target, 'refs/heads/master') - self.assertRaises(GitError, self.repo.create_reference, + + # try to create existing symbolic reference + self.assertRaises(ValueError, self.repo.create_reference, 'refs/tags/beta','refs/heads/master', symbolic=True) + # try to create existing symbolic reference with force reference = self.repo.create_reference('refs/tags/beta', 'refs/heads/master', force=True, symbolic=True) self.assertEqual(reference.type, GIT_REF_SYMBOLIC)