From a3a928a513f681613a4e470cf33921dc645b6919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= Date: Sat, 20 Apr 2013 09:03:13 +0200 Subject: [PATCH] Now Reference.target returns an Oid, not hex If the reference is direct, of course. --- src/reference.c | 39 +++++++++++++++++---------------------- test/test_refs.py | 2 +- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/reference.c b/src/reference.c index 0de1134..880fc06 100644 --- a/src/reference.c +++ b/src/reference.c @@ -204,18 +204,17 @@ Reference_target__get__(Reference *self) CHECK_REFERENCE(self); - /* Get the target */ - if (GIT_REF_OID == git_reference_type(self->reference)) { - return git_oid_to_py_str(git_reference_target(self->reference)); - } else { - c_name = git_reference_symbolic_target(self->reference); - if (c_name == NULL) { - PyErr_SetString(PyExc_ValueError, "no target available"); - return NULL; - } + /* Case 1: Direct */ + if (GIT_REF_OID == git_reference_type(self->reference)) + return git_oid_to_python(git_reference_target(self->reference)); + + /* Case 2: Symbolic */ + c_name = git_reference_symbolic_target(self->reference); + if (c_name == NULL) { + PyErr_SetString(PyExc_ValueError, "no target available"); + return NULL; } - /* Make a PyString and return it */ return to_path(c_name); } @@ -262,21 +261,17 @@ PyDoc_STRVAR(Reference_oid__doc__, "Object id."); PyObject * Reference_oid__get__(Reference *self) { - const git_oid *oid; - CHECK_REFERENCE(self); - /* Get the oid (only for "direct" references) */ - oid = git_reference_target(self->reference); - if (oid == NULL) { - PyErr_SetString(PyExc_ValueError, - "oid is only available if the reference is direct " - "(i.e. not symbolic)"); - return NULL; - } + /* Case 1: Direct */ + if (GIT_REF_OID == git_reference_type(self->reference)) + return git_oid_to_python(git_reference_target(self->reference)); - /* Convert and return it */ - return git_oid_to_python(oid); + /* Get the oid (only for "direct" references) */ + PyErr_SetString(PyExc_ValueError, + "oid is only available if the reference is direct " + "(i.e. not symbolic)"); + return NULL; } int diff --git a/test/test_refs.py b/test/test_refs.py index fb00182..6ef1b99 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -176,7 +176,7 @@ class ReferencesTest(utils.RepoTestCase): self.assertTrue('refs/tags/version1' in refs) reference = self.repo.lookup_reference('refs/tags/version1') self.assertEqual(reference.hex, LAST_COMMIT) - self.assertEqual(reference.target, LAST_COMMIT) + self.assertEqual(reference.target.hex, LAST_COMMIT) # try to create existing reference self.assertRaises(ValueError, self.repo.create_reference,