diff --git a/src/reference.c b/src/reference.c index 582fddb1..c9a64c28 100644 --- a/src/reference.c +++ b/src/reference.c @@ -216,21 +216,22 @@ Reference_rename(Reference *self, PyObject *py_name) { CHECK_REFERENCE(self); - /* Get the C name */ + // Get the C name char *c_name = pgit_encode_fsdefault(py_name); if (c_name == NULL) return NULL; - /* Rename */ + // Rename git_reference *new_reference; int err = git_reference_rename(&new_reference, self->reference, c_name, 0, NULL); free(c_name); - - git_reference_free(self->reference); if (err) return Error_set(err); + // Upadate reference + git_reference_free(self->reference); self->reference = new_reference; + Py_RETURN_NONE; } diff --git a/test/test_refs.py b/test/test_refs.py index 6220141a..334612c0 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -142,12 +142,17 @@ def test_refs_delete(testrepo): def test_refs_rename(testrepo): # We add a tag as a new reference that points to "origin/master" - reference = testrepo.references.create('refs/tags/version1', - LAST_COMMIT) + reference = testrepo.references.create('refs/tags/version1', LAST_COMMIT) assert reference.name == 'refs/tags/version1' reference.rename('refs/tags/version2') assert reference.name == 'refs/tags/version2' + with pytest.raises(AlreadyExistsError): + reference.rename('refs/tags/version2') + + with pytest.raises(InvalidSpecError): + reference.rename('b1') + #def test_reload(testrepo): # name = 'refs/tags/version1' # ref = testrepo.create_reference(name, "refs/heads/master", symbolic=True)