Factor out more object initialization.

Change-Id: I2f6d029ce22995ce4518b43593e6e45e481631f0
This commit is contained in:
Dave Borowitz
2010-11-01 16:41:11 -07:00
parent 33d775a1d7
commit bd9fe382d3

View File

@@ -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. */