Factor out more object initialization.
Change-Id: I2f6d029ce22995ce4518b43593e6e45e481631f0
This commit is contained in:
85
pygit2.c
85
pygit2.c
@@ -387,44 +387,45 @@ static PyTypeObject ObjectType = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
object_init_check(const char *type_name, PyObject *args, PyObject *kwds,
|
Object_init_with_type(Object *py_obj, const git_otype type, PyObject *args,
|
||||||
Repository **repo) {
|
PyObject *kwds) {
|
||||||
|
Repository *repo = NULL;
|
||||||
|
git_object *obj;
|
||||||
|
|
||||||
if (kwds) {
|
if (kwds) {
|
||||||
PyErr_Format(PyExc_TypeError, "%s takes no keyword arugments",
|
PyErr_Format(PyExc_TypeError, "%s takes no keyword arugments",
|
||||||
type_name);
|
py_obj->ob_type->tp_name);
|
||||||
return 0;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O", repo))
|
if (!PyArg_ParseTuple(args, "O", &repo))
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (!PyObject_TypeCheck(*repo, &RepositoryType)) {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "Expected Repository for repo");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
Commit_init(Commit *py_commit, PyObject *args, PyObject *kwds) {
|
|
||||||
Repository *repo = NULL;
|
|
||||||
git_commit *commit;
|
|
||||||
|
|
||||||
if (!object_init_check("Commit", args, kwds, &repo))
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
commit = git_commit_new(repo->repo);
|
if (!PyObject_TypeCheck(repo, &RepositoryType)) {
|
||||||
if (!commit) {
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
"repo argument must be %.200s, not %.200s",
|
||||||
|
RepositoryType.tp_name, repo->ob_type->tp_name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = git_object_new(repo->repo, type);
|
||||||
|
if (!obj) {
|
||||||
PyErr_SetNone(PyExc_MemoryError);
|
PyErr_SetNone(PyExc_MemoryError);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
Py_INCREF(repo);
|
Py_INCREF(repo);
|
||||||
py_commit->repo = repo;
|
py_obj->repo = repo;
|
||||||
py_commit->own_obj = 1;
|
py_obj->own_obj = 1;
|
||||||
py_commit->commit = commit;
|
py_obj->obj = obj;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
Commit_init(Commit *py_commit, PyObject *args, PyObject *kwds) {
|
||||||
|
return Object_init_with_type((Object*)py_commit, GIT_OBJ_COMMIT, args,
|
||||||
|
kwds);
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
Commit_get_message_short(Commit *commit) {
|
Commit_get_message_short(Commit *commit) {
|
||||||
return PyString_FromString(git_commit_message_short(commit->commit));
|
return PyString_FromString(git_commit_message_short(commit->commit));
|
||||||
@@ -678,22 +679,7 @@ static PyTypeObject TreeEntryType = {
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
Tree_init(Tree *py_tree, PyObject *args, PyObject *kwds) {
|
Tree_init(Tree *py_tree, PyObject *args, PyObject *kwds) {
|
||||||
Repository *repo = NULL;
|
return Object_init_with_type((Object*)py_tree, GIT_OBJ_TREE, args, kwds);
|
||||||
git_tree *tree;
|
|
||||||
|
|
||||||
if (!object_init_check("Tree", args, kwds, &repo))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
tree = git_tree_new(repo->repo);
|
|
||||||
if (!tree) {
|
|
||||||
PyErr_SetNone(PyExc_MemoryError);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
Py_INCREF(repo);
|
|
||||||
py_tree->repo = repo;
|
|
||||||
py_tree->own_obj = 1;
|
|
||||||
py_tree->tree = tree;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Py_ssize_t
|
static Py_ssize_t
|
||||||
@@ -922,22 +908,7 @@ static PyTypeObject TreeType = {
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
Blob_init(Blob *py_blob, PyObject *args, PyObject *kwds) {
|
Blob_init(Blob *py_blob, PyObject *args, PyObject *kwds) {
|
||||||
Repository *repo = NULL;
|
return Object_init_with_type((Object*)py_blob, GIT_OBJ_BLOB, args, kwds);
|
||||||
git_object *blob;
|
|
||||||
|
|
||||||
if (!object_init_check("blob", args, kwds, &repo))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
blob = git_object_new(repo->repo, GIT_OBJ_BLOB);
|
|
||||||
if (!blob) {
|
|
||||||
PyErr_SetNone(PyExc_MemoryError);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
Py_INCREF(repo);
|
|
||||||
py_blob->repo = repo;
|
|
||||||
py_blob->own_obj = 1;
|
|
||||||
py_blob->blob = blob;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: libgit2 needs some way to set blob data. */
|
/* TODO: libgit2 needs some way to set blob data. */
|
||||||
|
Reference in New Issue
Block a user