Revert "(issue #56) Remove TreeEntry.to_object"
This reverts commit 4cdb1a83b430fa27e2b0800ce17751631b036a78.
This commit is contained in:
parent
6dd8ec65a9
commit
f11533a65a
@ -165,6 +165,7 @@ This is the interface of a tree entry::
|
||||
TreeEntry.oid -- the id of the git object
|
||||
TreeEntry.hex -- hexadecimal representation of the oid
|
||||
TreeEntry.attributes -- the Unix file attributes
|
||||
TreeEntry.to_object() -- returns the git object (equivalent to repo[entry.oid])
|
||||
|
||||
Blobs
|
||||
-----------------
|
||||
|
24
pygit2.c
24
pygit2.c
@ -108,6 +108,7 @@ OBJECT_STRUCT(Walker, git_revwalk, walk)
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
const git_tree_entry *entry;
|
||||
Tree *tree;
|
||||
} TreeEntry;
|
||||
|
||||
typedef struct {
|
||||
@ -1328,6 +1329,7 @@ static PyTypeObject CommitType = {
|
||||
static void
|
||||
TreeEntry_dealloc(TreeEntry *self)
|
||||
{
|
||||
Py_XDECREF(self->tree);
|
||||
PyObject_Del(self);
|
||||
}
|
||||
|
||||
@ -1358,6 +1360,15 @@ TreeEntry_get_hex(TreeEntry *self)
|
||||
return git_oid_to_py_str(git_tree_entry_id(self->entry));
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
TreeEntry_to_object(TreeEntry *self)
|
||||
{
|
||||
const git_oid *entry_oid;
|
||||
|
||||
entry_oid = git_tree_entry_id(self->entry);
|
||||
return lookup_object(self->tree->repo, entry_oid, GIT_OBJ_ANY);
|
||||
}
|
||||
|
||||
static PyGetSetDef TreeEntry_getseters[] = {
|
||||
{"attributes", (getter)TreeEntry_get_attributes, NULL, "attributes", NULL},
|
||||
{"name", (getter)TreeEntry_get_name, NULL, "name", NULL},
|
||||
@ -1366,6 +1377,12 @@ static PyGetSetDef TreeEntry_getseters[] = {
|
||||
{NULL}
|
||||
};
|
||||
|
||||
static PyMethodDef TreeEntry_methods[] = {
|
||||
{"to_object", (PyCFunction)TreeEntry_to_object, METH_NOARGS,
|
||||
"Look up the corresponding object in the repo."},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
static PyTypeObject TreeEntryType = {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"pygit2.TreeEntry", /* tp_name */
|
||||
@ -1394,7 +1411,7 @@ static PyTypeObject TreeEntryType = {
|
||||
0, /* tp_weaklistoffset */
|
||||
0, /* tp_iter */
|
||||
0, /* tp_iternext */
|
||||
0, /* tp_methods */
|
||||
TreeEntry_methods, /* tp_methods */
|
||||
0, /* tp_members */
|
||||
TreeEntry_getseters, /* tp_getset */
|
||||
0, /* tp_base */
|
||||
@ -1432,8 +1449,11 @@ wrap_tree_entry(const git_tree_entry *entry, Tree *tree)
|
||||
TreeEntry *py_entry;
|
||||
|
||||
py_entry = PyObject_New(TreeEntry, &TreeEntryType);
|
||||
if (py_entry)
|
||||
if (py_entry) {
|
||||
py_entry->entry = entry;
|
||||
py_entry->tree = tree;
|
||||
Py_INCREF(tree);
|
||||
}
|
||||
return py_entry;
|
||||
}
|
||||
|
||||
|
@ -71,21 +71,20 @@ class TreeTest(utils.BareRepoTestCase):
|
||||
self.assertTreeEntryEqual(tree['b'], sha, 'b', 0o0100644)
|
||||
|
||||
def test_read_subtree(self):
|
||||
repo = self.repo
|
||||
tree = repo[TREE_SHA]
|
||||
tree = self.repo[TREE_SHA]
|
||||
subtree_entry = tree['c']
|
||||
self.assertTreeEntryEqual(subtree_entry, SUBTREE_SHA, 'c', 0o0040000)
|
||||
|
||||
subtree = repo[subtree_entry.oid]
|
||||
subtree = subtree_entry.to_object()
|
||||
self.assertEqual(1, len(subtree))
|
||||
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
|
||||
self.assertTreeEntryEqual(subtree[0], sha, 'd', 0o0100644)
|
||||
|
||||
# TODO This test worked with libgit2 v0.10.0, update to use the
|
||||
# tree-builder
|
||||
# XXX Creating new trees was removed from libgit2 by v0.11.0, we
|
||||
# deactivate this test temporarily, since the feature may come back in
|
||||
# a near feature (if it does not this test will be removed).
|
||||
def xtest_new_tree(self):
|
||||
repo = self.repo
|
||||
tree = pygit2.Tree(repo)
|
||||
tree = pygit2.Tree(self.repo)
|
||||
self.assertEqual(0, len(tree))
|
||||
tree.add_entry('1' * 40, 'x', 0o0100644)
|
||||
tree.add_entry('2' * 40, 'y', 0o0100755)
|
||||
@ -104,7 +103,8 @@ class TreeTest(utils.BareRepoTestCase):
|
||||
self.assertEqual(None, tree.hex)
|
||||
tree.write()
|
||||
contents = '100644 x\0%s100755 y\0%s' % ('\x11' * 20, '\x22' * 20)
|
||||
self.assertEqual((pygit2.GIT_OBJ_TREE, contents), repo.read(tree.hex))
|
||||
self.assertEqual((pygit2.GIT_OBJ_TREE, contents),
|
||||
self.repo.read(tree.hex))
|
||||
|
||||
def test_modify_tree(self):
|
||||
tree = self.repo[TREE_SHA]
|
||||
|
Loading…
x
Reference in New Issue
Block a user