From c5606d94f21465d9ad0ee3d26bf835d0233d39d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Rodri=CC=81guez=20Troitin=CC=83o?= Date: Thu, 16 May 2013 23:23:57 +0200 Subject: [PATCH] Add Repository pointer to Reference. As asked in #221. --- src/reference.c | 12 +++++++++--- src/reference.h | 2 +- src/repository.c | 8 ++++---- src/types.h | 5 +---- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/reference.c b/src/reference.c index 1e302c7..0ed45aa 100644 --- a/src/reference.c +++ b/src/reference.c @@ -107,6 +107,7 @@ PyTypeObject RefLogIterType = { void Reference_dealloc(Reference *self) { + Py_CLEAR(self->repo); git_reference_free(self->reference); PyObject_Del(self); } @@ -191,7 +192,7 @@ Reference_resolve(Reference *self, PyObject *args) if (err < 0) return Error_set(err); - return wrap_reference(c_reference); + return wrap_reference(c_reference, self->repo); } @@ -461,13 +462,18 @@ PyTypeObject ReferenceType = { PyObject * -wrap_reference(git_reference * c_reference) +wrap_reference(git_reference * c_reference, Repository *repo) { Reference *py_reference=NULL; py_reference = PyObject_New(Reference, &ReferenceType); - if (py_reference) + if (py_reference) { py_reference->reference = c_reference; + if (repo) { + py_reference->repo = repo; + Py_INCREF(repo); + } + } return (PyObject *)py_reference; } diff --git a/src/reference.h b/src/reference.h index ff63bbf..5cbd134 100644 --- a/src/reference.h +++ b/src/reference.h @@ -41,6 +41,6 @@ PyObject* Reference_get_name(Reference *self); PyObject* Reference_get_oid(Reference *self); PyObject* Reference_get_hex(Reference *self); PyObject* Reference_get_type(Reference *self); -PyObject* wrap_reference(git_reference * c_reference); +PyObject* wrap_reference(git_reference *c_reference, Repository *repo); #endif diff --git a/src/repository.c b/src/repository.c index 0cc7c3b..af388f4 100644 --- a/src/repository.c +++ b/src/repository.c @@ -168,7 +168,7 @@ Repository_head__get__(Repository *self) return NULL; } - return wrap_reference(head); + return wrap_reference(head, self); } int @@ -859,7 +859,7 @@ Repository_lookup_reference(Repository *self, PyObject *py_name) free(c_name); /* 3- Make an instance of Reference and return it */ - return wrap_reference(c_reference); + return wrap_reference(c_reference, self); } PyDoc_STRVAR(Repository_create_reference_direct__doc__, @@ -898,7 +898,7 @@ Repository_create_reference_direct(Repository *self, PyObject *args, if (err < 0) return Error_set(err); - return wrap_reference(c_reference); + return wrap_reference(c_reference, self); } PyDoc_STRVAR(Repository_create_reference_symbolic__doc__, @@ -932,7 +932,7 @@ Repository_create_reference_symbolic(Repository *self, PyObject *args, if (err < 0) return Error_set(err); - return wrap_reference(c_reference); + return wrap_reference(c_reference, self); } diff --git a/src/types.h b/src/types.h index fdc451e..a4ac5ec 100644 --- a/src/types.h +++ b/src/types.h @@ -159,10 +159,7 @@ typedef struct { /* git_reference, git_reflog */ SIMPLE_TYPE(Walker, git_revwalk, walk) -typedef struct { - PyObject_HEAD - git_reference *reference; -} Reference; +SIMPLE_TYPE(Reference, git_reference, reference) typedef struct { PyObject_HEAD