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.oid -- the id of the git object
|
||||||
TreeEntry.hex -- hexadecimal representation of the oid
|
TreeEntry.hex -- hexadecimal representation of the oid
|
||||||
TreeEntry.attributes -- the Unix file attributes
|
TreeEntry.attributes -- the Unix file attributes
|
||||||
|
TreeEntry.to_object() -- returns the git object (equivalent to repo[entry.oid])
|
||||||
|
|
||||||
Blobs
|
Blobs
|
||||||
-----------------
|
-----------------
|
||||||
|
24
pygit2.c
24
pygit2.c
@ -108,6 +108,7 @@ OBJECT_STRUCT(Walker, git_revwalk, walk)
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
const git_tree_entry *entry;
|
const git_tree_entry *entry;
|
||||||
|
Tree *tree;
|
||||||
} TreeEntry;
|
} TreeEntry;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -1328,6 +1329,7 @@ static PyTypeObject CommitType = {
|
|||||||
static void
|
static void
|
||||||
TreeEntry_dealloc(TreeEntry *self)
|
TreeEntry_dealloc(TreeEntry *self)
|
||||||
{
|
{
|
||||||
|
Py_XDECREF(self->tree);
|
||||||
PyObject_Del(self);
|
PyObject_Del(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1358,6 +1360,15 @@ TreeEntry_get_hex(TreeEntry *self)
|
|||||||
return git_oid_to_py_str(git_tree_entry_id(self->entry));
|
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[] = {
|
static PyGetSetDef TreeEntry_getseters[] = {
|
||||||
{"attributes", (getter)TreeEntry_get_attributes, NULL, "attributes", NULL},
|
{"attributes", (getter)TreeEntry_get_attributes, NULL, "attributes", NULL},
|
||||||
{"name", (getter)TreeEntry_get_name, NULL, "name", NULL},
|
{"name", (getter)TreeEntry_get_name, NULL, "name", NULL},
|
||||||
@ -1366,6 +1377,12 @@ static PyGetSetDef TreeEntry_getseters[] = {
|
|||||||
{NULL}
|
{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 = {
|
static PyTypeObject TreeEntryType = {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"pygit2.TreeEntry", /* tp_name */
|
"pygit2.TreeEntry", /* tp_name */
|
||||||
@ -1394,7 +1411,7 @@ static PyTypeObject TreeEntryType = {
|
|||||||
0, /* tp_weaklistoffset */
|
0, /* tp_weaklistoffset */
|
||||||
0, /* tp_iter */
|
0, /* tp_iter */
|
||||||
0, /* tp_iternext */
|
0, /* tp_iternext */
|
||||||
0, /* tp_methods */
|
TreeEntry_methods, /* tp_methods */
|
||||||
0, /* tp_members */
|
0, /* tp_members */
|
||||||
TreeEntry_getseters, /* tp_getset */
|
TreeEntry_getseters, /* tp_getset */
|
||||||
0, /* tp_base */
|
0, /* tp_base */
|
||||||
@ -1432,8 +1449,11 @@ wrap_tree_entry(const git_tree_entry *entry, Tree *tree)
|
|||||||
TreeEntry *py_entry;
|
TreeEntry *py_entry;
|
||||||
|
|
||||||
py_entry = PyObject_New(TreeEntry, &TreeEntryType);
|
py_entry = PyObject_New(TreeEntry, &TreeEntryType);
|
||||||
if (py_entry)
|
if (py_entry) {
|
||||||
py_entry->entry = entry;
|
py_entry->entry = entry;
|
||||||
|
py_entry->tree = tree;
|
||||||
|
Py_INCREF(tree);
|
||||||
|
}
|
||||||
return py_entry;
|
return py_entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,21 +71,20 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
self.assertTreeEntryEqual(tree['b'], sha, 'b', 0o0100644)
|
self.assertTreeEntryEqual(tree['b'], sha, 'b', 0o0100644)
|
||||||
|
|
||||||
def test_read_subtree(self):
|
def test_read_subtree(self):
|
||||||
repo = self.repo
|
tree = self.repo[TREE_SHA]
|
||||||
tree = repo[TREE_SHA]
|
|
||||||
subtree_entry = tree['c']
|
subtree_entry = tree['c']
|
||||||
self.assertTreeEntryEqual(subtree_entry, SUBTREE_SHA, 'c', 0o0040000)
|
self.assertTreeEntryEqual(subtree_entry, SUBTREE_SHA, 'c', 0o0040000)
|
||||||
|
|
||||||
subtree = repo[subtree_entry.oid]
|
subtree = subtree_entry.to_object()
|
||||||
self.assertEqual(1, len(subtree))
|
self.assertEqual(1, len(subtree))
|
||||||
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
|
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
|
||||||
self.assertTreeEntryEqual(subtree[0], sha, 'd', 0o0100644)
|
self.assertTreeEntryEqual(subtree[0], sha, 'd', 0o0100644)
|
||||||
|
|
||||||
# TODO This test worked with libgit2 v0.10.0, update to use the
|
# XXX Creating new trees was removed from libgit2 by v0.11.0, we
|
||||||
# tree-builder
|
# 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):
|
def xtest_new_tree(self):
|
||||||
repo = self.repo
|
tree = pygit2.Tree(self.repo)
|
||||||
tree = pygit2.Tree(repo)
|
|
||||||
self.assertEqual(0, len(tree))
|
self.assertEqual(0, len(tree))
|
||||||
tree.add_entry('1' * 40, 'x', 0o0100644)
|
tree.add_entry('1' * 40, 'x', 0o0100644)
|
||||||
tree.add_entry('2' * 40, 'y', 0o0100755)
|
tree.add_entry('2' * 40, 'y', 0o0100755)
|
||||||
@ -104,7 +103,8 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
self.assertEqual(None, tree.hex)
|
self.assertEqual(None, tree.hex)
|
||||||
tree.write()
|
tree.write()
|
||||||
contents = '100644 x\0%s100755 y\0%s' % ('\x11' * 20, '\x22' * 20)
|
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):
|
def test_modify_tree(self):
|
||||||
tree = self.repo[TREE_SHA]
|
tree = self.repo[TREE_SHA]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user