Add type attribute to TreeEntry
This allows complete iteration and rebuilding of a tree without hitting the object store for every entry.
This commit is contained in:
@@ -176,6 +176,7 @@ Tree entries
|
||||
.. autoattribute:: pygit2.TreeEntry.id
|
||||
.. autoattribute:: pygit2.TreeEntry.hex
|
||||
.. autoattribute:: pygit2.TreeEntry.filemode
|
||||
.. autoattribute:: pygit2.TreeEntry.type
|
||||
|
||||
.. method:: TreeEntry.__cmp__(TreeEntry)
|
||||
|
||||
@@ -188,14 +189,14 @@ Example::
|
||||
6
|
||||
|
||||
>>> for entry in tree: # Iteration
|
||||
... print(entry.id, entry.name)
|
||||
... print(entry.id, entry.type, entry.name)
|
||||
...
|
||||
7151ca7cd3e59f3eab19c485cfbf3cb30928d7fa .gitignore
|
||||
c36f4cf1e38ec1bb9d9ad146ed572b89ecfc9f18 COPYING
|
||||
32b30b90b062f66957d6790c3c155c289c34424e README.md
|
||||
c87dae4094b3a6d10e08bc6c5ef1f55a7e448659 pygit2.c
|
||||
85a67270a49ef16cdd3d328f06a3e4b459f09b27 setup.py
|
||||
3d8985bbec338eb4d47c5b01b863ee89d044bd53 test
|
||||
7151ca7cd3e59f3eab19c485cfbf3cb30928d7fa blob .gitignore
|
||||
c36f4cf1e38ec1bb9d9ad146ed572b89ecfc9f18 blob COPYING
|
||||
32b30b90b062f66957d6790c3c155c289c34424e blob README.md
|
||||
c87dae4094b3a6d10e08bc6c5ef1f55a7e448659 blob pygit2.c
|
||||
85a67270a49ef16cdd3d328f06a3e4b459f09b27 blob setup.py
|
||||
3d8985bbec338eb4d47c5b01b863ee89d044bd53 tree test
|
||||
|
||||
>>> entry = tree['pygit2.c'] # Get an entry by name
|
||||
>>> entry
|
||||
|
10
src/tree.c
10
src/tree.c
@@ -67,6 +67,15 @@ TreeEntry_name__get__(TreeEntry *self)
|
||||
}
|
||||
|
||||
|
||||
PyDoc_STRVAR(TreeEntry_type__doc__, "Type.");
|
||||
|
||||
PyObject *
|
||||
TreeEntry_type__get__(TreeEntry *self)
|
||||
{
|
||||
return to_path(git_object_type2string(git_tree_entry_type(self->entry)));
|
||||
}
|
||||
|
||||
|
||||
PyDoc_STRVAR(TreeEntry_id__doc__, "Object id.");
|
||||
|
||||
PyObject *
|
||||
@@ -171,6 +180,7 @@ PyGetSetDef TreeEntry_getseters[] = {
|
||||
GETTER(TreeEntry, oid),
|
||||
GETTER(TreeEntry, id),
|
||||
GETTER(TreeEntry, hex),
|
||||
GETTER(TreeEntry, type),
|
||||
{NULL}
|
||||
};
|
||||
|
||||
|
@@ -32,7 +32,7 @@ from __future__ import unicode_literals
|
||||
import operator
|
||||
import unittest
|
||||
|
||||
from pygit2 import TreeEntry
|
||||
from pygit2 import TreeEntry, GIT_FILEMODE_TREE
|
||||
from . import utils
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@ class TreeTest(utils.BareRepoTestCase):
|
||||
tree = self.repo[TREE_SHA]
|
||||
subtree_entry = tree['c']
|
||||
self.assertTreeEntryEqual(subtree_entry, SUBTREE_SHA, 'c', 0o0040000)
|
||||
self.assertEquals(subtree_entry.type, 'tree')
|
||||
|
||||
subtree = self.repo[subtree_entry.id]
|
||||
self.assertEqual(1, len(subtree))
|
||||
@@ -100,21 +101,34 @@ class TreeTest(utils.BareRepoTestCase):
|
||||
repo = self.repo
|
||||
b0 = repo.create_blob('1')
|
||||
b1 = repo.create_blob('2')
|
||||
st = repo.TreeBuilder()
|
||||
st.insert('a', b0, 0o0100644)
|
||||
subtree = repo[st.write()]
|
||||
|
||||
t = repo.TreeBuilder()
|
||||
t.insert('x', b0, 0o0100644)
|
||||
t.insert('y', b1, 0o0100755)
|
||||
t.insert('z', subtree.id, GIT_FILEMODE_TREE)
|
||||
tree = repo[t.write()]
|
||||
|
||||
self.assertTrue('x' in tree)
|
||||
self.assertTrue('y' in tree)
|
||||
self.assertTrue('z' in tree)
|
||||
|
||||
x = tree['x']
|
||||
y = tree['y']
|
||||
z = tree['z']
|
||||
self.assertEqual(x.filemode, 0o0100644)
|
||||
self.assertEqual(y.filemode, 0o0100755)
|
||||
self.assertEqual(z.filemode, GIT_FILEMODE_TREE)
|
||||
|
||||
self.assertEqual(repo[x.id].id, b0)
|
||||
self.assertEqual(repo[y.id].id, b1)
|
||||
self.assertEqual(repo[z.id].id, subtree.id)
|
||||
|
||||
self.assertEqual(x.type, 'blob')
|
||||
self.assertEqual(y.type, 'blob')
|
||||
self.assertEqual(z.type, 'tree')
|
||||
|
||||
|
||||
def test_modify_tree(self):
|
||||
|
Reference in New Issue
Block a user