Merge remote-tracking branch 'carlos/leaks'
This commit is contained in:
@@ -623,8 +623,9 @@ IndexEntry_init(IndexEntry *self, PyObject *args, PyObject *kwds)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
memset(&self->entry, 0, sizeof(struct git_index_entry));
|
memset(&self->entry, 0, sizeof(struct git_index_entry));
|
||||||
if (c_path)
|
self->entry.path = strdup(c_path);
|
||||||
self->entry.path = c_path;
|
if (!self->entry.path)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (id)
|
if (id)
|
||||||
git_oid_cpy(&self->entry.oid, &id->oid);
|
git_oid_cpy(&self->entry.oid, &id->oid);
|
||||||
@@ -638,6 +639,7 @@ IndexEntry_init(IndexEntry *self, PyObject *args, PyObject *kwds)
|
|||||||
void
|
void
|
||||||
IndexEntry_dealloc(IndexEntry *self)
|
IndexEntry_dealloc(IndexEntry *self)
|
||||||
{
|
{
|
||||||
|
free(self->entry.path);
|
||||||
PyObject_Del(self);
|
PyObject_Del(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -50,6 +50,14 @@ git_merge_result_to_python(git_merge_result *merge_result)
|
|||||||
return (PyObject*) py_merge_result;
|
return (PyObject*) py_merge_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MergeResult_dealloc(MergeResult *self)
|
||||||
|
{
|
||||||
|
git_merge_result_free(self->result);
|
||||||
|
PyObject_Del(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(MergeResult_is_uptodate__doc__, "Is up to date");
|
PyDoc_STRVAR(MergeResult_is_uptodate__doc__, "Is up to date");
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
@@ -99,7 +107,7 @@ PyTypeObject MergeResultType = {
|
|||||||
"_pygit2.MergeResult", /* tp_name */
|
"_pygit2.MergeResult", /* tp_name */
|
||||||
sizeof(MergeResult), /* tp_basicsize */
|
sizeof(MergeResult), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
0, /* tp_dealloc */
|
(destructor)MergeResult_dealloc, /* tp_dealloc */
|
||||||
0, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
|
@@ -175,6 +175,7 @@ transfer_progress_cb(const git_transfer_progress *stats, void *data)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ret = PyObject_CallFunctionObjArgs(remote->transfer_progress, py_stats, NULL);
|
ret = PyObject_CallFunctionObjArgs(remote->transfer_progress, py_stats, NULL);
|
||||||
|
Py_DECREF(py_stats);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@@ -139,6 +139,7 @@ Repository_as_iter(Repository *self)
|
|||||||
git_odb *odb;
|
git_odb *odb;
|
||||||
int err;
|
int err;
|
||||||
PyObject *accum = PyList_New(0);
|
PyObject *accum = PyList_New(0);
|
||||||
|
PyObject *ret;
|
||||||
|
|
||||||
err = git_repository_odb(&odb, self->repo);
|
err = git_repository_odb(&odb, self->repo);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -151,7 +152,10 @@ Repository_as_iter(Repository *self)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return Error_set(err);
|
return Error_set(err);
|
||||||
|
|
||||||
return PyObject_GetIter(accum);
|
ret = PyObject_GetIter(accum);
|
||||||
|
Py_DECREF(accum);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1345,7 +1349,7 @@ Repository_default_signature__get__(Repository *self)
|
|||||||
if ((err = git_signature_default(&sig, self->repo)) < 0)
|
if ((err = git_signature_default(&sig, self->repo)) < 0)
|
||||||
return Error_set(err);
|
return Error_set(err);
|
||||||
|
|
||||||
return build_signature((Object*) self, sig, "utf-8");
|
return build_signature(NULL, sig, "utf-8");
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(Repository_checkout_head__doc__,
|
PyDoc_STRVAR(Repository_checkout_head__doc__,
|
||||||
|
@@ -83,11 +83,12 @@ Signature_init(Signature *self, PyObject *args, PyObject *kwds)
|
|||||||
void
|
void
|
||||||
Signature_dealloc(Signature *self)
|
Signature_dealloc(Signature *self)
|
||||||
{
|
{
|
||||||
if (self->obj)
|
/* self->obj is the owner of the git_signature, so we musn't free it */
|
||||||
|
if (self->obj) {
|
||||||
Py_CLEAR(self->obj);
|
Py_CLEAR(self->obj);
|
||||||
else {
|
} else {
|
||||||
git_signature_free((git_signature *) self->signature);
|
git_signature_free((git_signature *) self->signature);
|
||||||
free((char*)self->encoding);
|
free(self->encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject_Del(self);
|
PyObject_Del(self);
|
||||||
@@ -224,12 +225,23 @@ build_signature(Object *obj, const git_signature *signature,
|
|||||||
Signature *py_signature;
|
Signature *py_signature;
|
||||||
|
|
||||||
py_signature = PyObject_New(Signature, &SignatureType);
|
py_signature = PyObject_New(Signature, &SignatureType);
|
||||||
|
if (!py_signature)
|
||||||
|
goto on_error;
|
||||||
|
|
||||||
if (py_signature) {
|
py_signature->encoding = NULL;
|
||||||
Py_INCREF(obj);
|
if (encoding) {
|
||||||
|
py_signature->encoding = strdup(encoding);
|
||||||
|
if (!py_signature->encoding)
|
||||||
|
goto on_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
Py_XINCREF(obj);
|
||||||
py_signature->obj = obj;
|
py_signature->obj = obj;
|
||||||
py_signature->signature = signature;
|
py_signature->signature = signature;
|
||||||
py_signature->encoding = encoding;
|
|
||||||
}
|
|
||||||
return (PyObject*)py_signature;
|
return (PyObject*)py_signature;
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
git_signature_free((git_signature *) signature);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@@ -191,7 +191,7 @@ typedef struct {
|
|||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
Object *obj;
|
Object *obj;
|
||||||
const git_signature *signature;
|
const git_signature *signature;
|
||||||
const char *encoding;
|
char *encoding;
|
||||||
} Signature;
|
} Signature;
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user