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`).
This commit is contained in:
parent
b66fa71bae
commit
cc7f137f7b
@ -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
|
||||
|
@ -34,6 +34,12 @@
|
||||
#include <pygit2/repository.h>
|
||||
#include <pygit2/object.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <pygit2/types.h>
|
||||
#include <pygit2/reference.h>
|
||||
#include <pygit2/utils.h>
|
||||
#include <pygit2/object.h>
|
||||
#include <pygit2/oid.h>
|
||||
#include <pygit2/repository.h>
|
||||
|
||||
@ -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 *
|
||||
|
Loading…
x
Reference in New Issue
Block a user