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
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;
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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