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_hex(Object *self);
|
||||||
PyObject* Object_get_type(Object *self);
|
PyObject* Object_get_type(Object *self);
|
||||||
PyObject* Object_read_raw(Object *self);
|
PyObject* Object_read_raw(Object *self);
|
||||||
|
PyObject* wrap_object(git_object *c_object, Repository *repo);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,6 +34,12 @@
|
|||||||
#include <pygit2/repository.h>
|
#include <pygit2/repository.h>
|
||||||
#include <pygit2/object.h>
|
#include <pygit2/object.h>
|
||||||
|
|
||||||
|
extern PyTypeObject TreeType;
|
||||||
|
extern PyTypeObject CommitType;
|
||||||
|
extern PyTypeObject BlobType;
|
||||||
|
extern PyTypeObject TagType;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Object_dealloc(Object* self)
|
Object_dealloc(Object* self)
|
||||||
{
|
{
|
||||||
@ -145,3 +151,35 @@ PyTypeObject ObjectType = {
|
|||||||
0, /* tp_alloc */
|
0, /* tp_alloc */
|
||||||
0, /* tp_new */
|
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/types.h>
|
||||||
#include <pygit2/reference.h>
|
#include <pygit2/reference.h>
|
||||||
#include <pygit2/utils.h>
|
#include <pygit2/utils.h>
|
||||||
|
#include <pygit2/object.h>
|
||||||
#include <pygit2/oid.h>
|
#include <pygit2/oid.h>
|
||||||
#include <pygit2/repository.h>
|
#include <pygit2/repository.h>
|
||||||
|
|
||||||
@ -40,9 +41,6 @@ extern PyTypeObject IndexType;
|
|||||||
extern PyTypeObject WalkerType;
|
extern PyTypeObject WalkerType;
|
||||||
extern PyTypeObject SignatureType;
|
extern PyTypeObject SignatureType;
|
||||||
extern PyTypeObject TreeType;
|
extern PyTypeObject TreeType;
|
||||||
extern PyTypeObject CommitType;
|
|
||||||
extern PyTypeObject BlobType;
|
|
||||||
extern PyTypeObject TagType;
|
|
||||||
extern PyTypeObject TreeBuilderType;
|
extern PyTypeObject TreeBuilderType;
|
||||||
extern PyTypeObject ConfigType;
|
extern PyTypeObject ConfigType;
|
||||||
extern PyTypeObject DiffType;
|
extern PyTypeObject DiffType;
|
||||||
@ -72,29 +70,7 @@ lookup_object_prefix(Repository *repo, const git_oid *oid, size_t len,
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return Error_set_oid(err, oid, len);
|
return Error_set_oid(err, oid, len);
|
||||||
|
|
||||||
switch (git_object_type(obj)) {
|
return wrap_object(obj, repo);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user