8000 Add type attribute to TreeEntry · libgit2/pygit2@ac7738b · GitHub
[go: up one dir, main page]

Skip to content

Commit ac7738b

Browse files
committed
Add type attribute to TreeEntry
This allows complete iteration and rebuilding of a tree without hitting the object store for every entry.
1 parent 29a8dbc commit ac7738b

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

docs/objects.rst

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ Tree entries
176176
.. autoattribute:: pygit2.TreeEntry.id
177177
.. autoattribute:: pygit2.TreeEntry.hex
178178
.. autoattribute:: pygit2.TreeEntry.filemode
179+
.. autoattribute:: pygit2.TreeEntry.type
179180

180181
.. method:: TreeEntry.__cmp__(TreeEntry)
181182

@@ -188,14 +189,14 @@ Example::
188189
6
189190

190191
>>> for entry in tree: # Iteration
191-
... print(entry.id, entry.name)
192+
... print(entry.id, entry.type, entry.name)
192193
...
193-
7151ca7cd3e59f3eab19c485cfbf3cb30928d7fa .gitignore
194-
c36f4cf1e38ec1bb9d9ad146ed572b89ecfc9f18 COPYING
195-
32b30b90b062f66957d6790c3c155c289c34424e README.md
196-
c87dae4094b3a6d10e08bc6c5ef1f55a7e448659 pygit2. 10000 c
197-
85a67270a49ef16cdd3d328f06a3e4b459f09b27 setup.py
198-
3d8985bbec338eb4d47c5b01b863ee89d044bd53 test
194+
7151ca7cd3e59f3eab19c485cfbf3cb30928d7fa blob .gitignore
195+
c36f4cf1e38ec1bb9d9ad146ed572b89ecfc9f18 blob COPYING
196+
32b30b90b062f66957d6790c3c155c289c34424e blob README.md
197+
c87dae4094b3a6d10e08bc6c5ef1f55a7e448659 blob pygit2.c
198+
85a67270a49ef16cdd3d328f06a3e4b459f09b27 blob setup.py
199+
3d8985bbec338eb4d47c5b01b863ee89d044bd53 tree test
199200

200201
>>> entry = tree['pygit2.c'] # Get an entry by name
201202
>>> entry

src/tree.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ TreeEntry_name__get__(TreeEntry *self)
6767
}
6868

6969

70+
PyDoc_STRVAR(TreeEntry_type__doc__, "Type.");
71+
72+
PyObject *
73+
TreeEntry_type__get__(TreeEntry *self)
74+
{
75+
return to_path(git_object_type2string(git_tree_entry_type(self->entry)));
76+
}
77+
78+
7079
PyDoc_STRVAR(TreeEntry_id__doc__, "Object id.");
7180

7281
PyObject *
@@ -171,6 +180,7 @@ PyGetSetDef TreeEntry_getseters[] = {
171180
GETTER(TreeEntry, oid),
172181
GETTER(TreeEntry, id),
173182
GETTER(TreeEntry, hex),
183+
GETTER(TreeEntry, type),
174184
{NULL}
175185
};
176186

test/test_tree.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import operator
3333
import unittest
3434

35-
from pygit2 import TreeEntry
35+
from pygit2 import TreeEntry, GIT_FILEMODE_TREE
3636
from . import utils
3737

3838

@@ -89,6 +89,7 @@ def test_read_subtree(self):
8989
tree = self.repo[TREE_SHA]
9090
subtree_entry = tree['c']
9191
self.assertTreeEntryEqual(subtree_entry, SUBTREE_SHA, 'c', 0o0040000)
92+
self.assertEquals(subtree_entry.type, 'tree')
9293

9394
subtree = self.repo[subtree_entry.id]
9495
self.assertEqual(1, len(subtree))
@@ -100,21 +101,34 @@ def test_new_tree(self):
100101
repo = self.repo
101102
b0 = repo.create_blob('1')
102103
b1 = repo.create_blob('2')
104+
st = repo.TreeBuilder()
105+
st.insert('a', b0, 0o0100644)
106+
subtree = repo[st.write()]
107+
103108
t = repo.TreeBuilder()
104109
t.insert('x', b0, 0o0100644)
105110
t.insert('y', b1, 0o0100755)
111+
t.insert('z', subtree.id, GIT_FILEMODE_TREE)
106112
tree = repo[t.write()]
107113

108114
self.assertTrue('x' in tree)
109115
self.assertTrue('y' in tree)
116+
self.assertTrue('z' in tree)
110117

111118
x = tree['x']
112119
y = tree['y']
120+
z = tree['z']
113121
self.assertEqual(x.filemode, 0o0100644)
114122
self.assertEqual(y.filemode, 0o0100755)
123+
self.assertEqual(z.filemode, GIT_FILEMODE_TREE)
115124

116125
self.assertEqual(repo[x.id].id, b0)
117126
self.assertEqual(repo[y.id].id, b1)
127+
self.assertEqual(repo[z.id].id, subtree.id)
128+
129+
self.assertEqual(x.type, 'blob')
130+
self.assertEqual(y.type, 'blob')
131+
self.assertEqual(z.type, 'tree')
118132

119133

120134
def test_modify_tree(self):

0 commit comments

Comments
 (0)
0