From cc7f137f7b003abb1bd105d7855a8b16d464b451 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 13 Sep 2012 16:41:56 -0400 Subject: [PATCH] object: factor `wrap_object` out of `lookup_object_prefix`. Generating an `Object *` from a `git_object *` may be useful in other functions (e.g. the upcoming `Repository_revparse_single`). --- include/pygit2/object.h | 1 + src/pygit2/object.c | 38 ++++++++++++++++++++++++++++++++++++++ src/pygit2/repository.c | 28 ++-------------------------- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/include/pygit2/object.h b/include/pygit2/object.h index 5255996..64bf612 100644 --- a/include/pygit2/object.h +++ b/include/pygit2/object.h @@ -37,5 +37,6 @@ PyObject* Object_get_oid(Object *self); PyObject* Object_get_hex(Object *self); PyObject* Object_get_type(Object *self); PyObject* Object_read_raw(Object *self); +PyObject* wrap_object(git_object *c_object, Repository *repo); #endif diff --git a/src/pygit2/object.c b/src/pygit2/object.c index 12a0855..172cf3f 100644 --- a/src/pygit2/object.c +++ b/src/pygit2/object.c @@ -34,6 +34,12 @@ #include #include +extern PyTypeObject TreeType; +extern PyTypeObject CommitType; +extern PyTypeObject BlobType; +extern PyTypeObject TagType; + + void Object_dealloc(Object* self) { @@ -145,3 +151,35 @@ PyTypeObject ObjectType = { 0, /* tp_alloc */ 0, /* tp_new */ }; + +PyObject * +wrap_object(git_object *c_object, Repository *repo) +{ + Object *py_obj = NULL; + + switch (git_object_type(c_object)) { + case GIT_OBJ_COMMIT: + py_obj = PyObject_New(Object, &CommitType); + break; + case GIT_OBJ_TREE: + py_obj = PyObject_New(Object, &TreeType); + break; + case GIT_OBJ_BLOB: + py_obj = PyObject_New(Object, &BlobType); + break; + case GIT_OBJ_TAG: + py_obj = PyObject_New(Object, &TagType); + break; + default: + assert(0); + } + + if (py_obj) { + py_obj->obj = c_object; + if (repo) { + py_obj->repo = repo; + Py_INCREF(repo); + } + } + return (PyObject *)py_obj; +} diff --git a/src/pygit2/repository.c b/src/pygit2/repository.c index 7650388..30f7030 100644 --- a/src/pygit2/repository.c +++ b/src/pygit2/repository.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -40,9 +41,6 @@ extern PyTypeObject IndexType; extern PyTypeObject WalkerType; extern PyTypeObject SignatureType; extern PyTypeObject TreeType; -extern PyTypeObject CommitType; -extern PyTypeObject BlobType; -extern PyTypeObject TagType; extern PyTypeObject TreeBuilderType; extern PyTypeObject ConfigType; extern PyTypeObject DiffType; @@ -72,29 +70,7 @@ lookup_object_prefix(Repository *repo, const git_oid *oid, size_t len, if (err < 0) return Error_set_oid(err, oid, len); - switch (git_object_type(obj)) { - case GIT_OBJ_COMMIT: - py_obj = PyObject_New(Object, &CommitType); - break; - case GIT_OBJ_TREE: - py_obj = PyObject_New(Object, &TreeType); - break; - case GIT_OBJ_BLOB: - py_obj = PyObject_New(Object, &BlobType); - break; - case GIT_OBJ_TAG: - py_obj = PyObject_New(Object, &TagType); - break; - default: - assert(0); - } - - if (py_obj) { - py_obj->obj = obj; - py_obj->repo = repo; - Py_INCREF(repo); - } - return (PyObject*)py_obj; + return wrap_object(obj, repo); } PyObject *