Add Repository pointer to Reference.

As asked in #221.
This commit is contained in:
Daniel Rodríguez Troitiño
2013-05-16 23:23:57 +02:00
parent 672319fcc4
commit c5606d94f2
4 changed files with 15 additions and 12 deletions

View File

@@ -107,6 +107,7 @@ PyTypeObject RefLogIterType = {
void void
Reference_dealloc(Reference *self) Reference_dealloc(Reference *self)
{ {
Py_CLEAR(self->repo);
git_reference_free(self->reference); git_reference_free(self->reference);
PyObject_Del(self); PyObject_Del(self);
} }
@@ -191,7 +192,7 @@ Reference_resolve(Reference *self, PyObject *args)
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);
return wrap_reference(c_reference); return wrap_reference(c_reference, self->repo);
} }
@@ -461,13 +462,18 @@ PyTypeObject ReferenceType = {
PyObject * PyObject *
wrap_reference(git_reference * c_reference) wrap_reference(git_reference * c_reference, Repository *repo)
{ {
Reference *py_reference=NULL; Reference *py_reference=NULL;
py_reference = PyObject_New(Reference, &ReferenceType); py_reference = PyObject_New(Reference, &ReferenceType);
if (py_reference) if (py_reference) {
py_reference->reference = c_reference; py_reference->reference = c_reference;
if (repo) {
py_reference->repo = repo;
Py_INCREF(repo);
}
}
return (PyObject *)py_reference; return (PyObject *)py_reference;
} }

View File

@@ -41,6 +41,6 @@ PyObject* Reference_get_name(Reference *self);
PyObject* Reference_get_oid(Reference *self); PyObject* Reference_get_oid(Reference *self);
PyObject* Reference_get_hex(Reference *self); PyObject* Reference_get_hex(Reference *self);
PyObject* Reference_get_type(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 #endif

View File

@@ -168,7 +168,7 @@ Repository_head__get__(Repository *self)
return NULL; return NULL;
} }
return wrap_reference(head); return wrap_reference(head, self);
} }
int int
@@ -859,7 +859,7 @@ Repository_lookup_reference(Repository *self, PyObject *py_name)
free(c_name); free(c_name);
/* 3- Make an instance of Reference and return it */ /* 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__, PyDoc_STRVAR(Repository_create_reference_direct__doc__,
@@ -898,7 +898,7 @@ Repository_create_reference_direct(Repository *self, PyObject *args,
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);
return wrap_reference(c_reference); return wrap_reference(c_reference, self);
} }
PyDoc_STRVAR(Repository_create_reference_symbolic__doc__, PyDoc_STRVAR(Repository_create_reference_symbolic__doc__,
@@ -932,7 +932,7 @@ Repository_create_reference_symbolic(Repository *self, PyObject *args,
if (err < 0) if (err < 0)
return Error_set(err); return Error_set(err);
return wrap_reference(c_reference); return wrap_reference(c_reference, self);
} }

View File

@@ -159,10 +159,7 @@ typedef struct {
/* git_reference, git_reflog */ /* git_reference, git_reflog */
SIMPLE_TYPE(Walker, git_revwalk, walk) SIMPLE_TYPE(Walker, git_revwalk, walk)
typedef struct { SIMPLE_TYPE(Reference, git_reference, reference)
PyObject_HEAD
git_reference *reference;
} Reference;
typedef struct { typedef struct {
PyObject_HEAD PyObject_HEAD