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.id
|
||||||
.. autoattribute:: pygit2.TreeEntry.hex
|
.. autoattribute:: pygit2.TreeEntry.hex
|
||||||
.. autoattribute:: pygit2.TreeEntry.filemode
|
.. autoattribute:: pygit2.TreeEntry.filemode
|
||||||
|
.. autoattribute:: pygit2.TreeEntry.type
|
||||||
|
|
||||||
.. method:: TreeEntry.__cmp__(TreeEntry)
|
.. method:: TreeEntry.__cmp__(TreeEntry)
|
||||||
|
|
||||||
@@ -188,14 +189,14 @@ Example::
|
|||||||
6
|
6
|
||||||
|
|
||||||
>>> for entry in tree: # Iteration
|
>>> for entry in tree: # Iteration
|
||||||
... print(entry.id, entry.name)
|
... print(entry.id, entry.type, entry.name)
|
||||||
...
|
...
|
||||||
7151ca7cd3e59f3eab19c485cfbf3cb30928d7fa .gitignore
|
7151ca7cd3e59f3eab19c485cfbf3cb30928d7fa blob .gitignore
|
||||||
c36f4cf1e38ec1bb9d9ad146ed572b89ecfc9f18 COPYING
|
c36f4cf1e38ec1bb9d9ad146ed572b89ecfc9f18 blob COPYING
|
||||||
32b30b90b062f66957d6790c3c155c289c34424e README.md
|
32b30b90b062f66957d6790c3c155c289c34424e blob README.md
|
||||||
c87dae4094b3a6d10e08bc6c5ef1f55a7e448659 pygit2.c
|
c87dae4094b3a6d10e08bc6c5ef1f55a7e448659 blob pygit2.c
|
||||||
85a67270a49ef16cdd3d328f06a3e4b459f09b27 setup.py
|
85a67270a49ef16cdd3d328f06a3e4b459f09b27 blob setup.py
|
||||||
3d8985bbec338eb4d47c5b01b863ee89d044bd53 test
|
3d8985bbec338eb4d47c5b01b863ee89d044bd53 tree test
|
||||||
|
|
||||||
>>> entry = tree['pygit2.c'] # Get an entry by name
|
>>> entry = tree['pygit2.c'] # Get an entry by name
|
||||||
>>> entry
|
>>> 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.");
|
PyDoc_STRVAR(TreeEntry_id__doc__, "Object id.");
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
@@ -171,6 +180,7 @@ PyGetSetDef TreeEntry_getseters[] = {
|
|||||||
GETTER(TreeEntry, oid),
|
GETTER(TreeEntry, oid),
|
||||||
GETTER(TreeEntry, id),
|
GETTER(TreeEntry, id),
|
||||||
GETTER(TreeEntry, hex),
|
GETTER(TreeEntry, hex),
|
||||||
|
GETTER(TreeEntry, type),
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -32,7 +32,7 @@ from __future__ import unicode_literals
|
|||||||
import operator
|
import operator
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from pygit2 import TreeEntry
|
from pygit2 import TreeEntry, GIT_FILEMODE_TREE
|
||||||
from . import utils
|
from . import utils
|
||||||
|
|
||||||
|
|
||||||
@@ -89,6 +89,7 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
tree = self.repo[TREE_SHA]
|
tree = self.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)
|
||||||
|
self.assertEquals(subtree_entry.type, 'tree')
|
||||||
|
|
||||||
subtree = self.repo[subtree_entry.id]
|
subtree = self.repo[subtree_entry.id]
|
||||||
self.assertEqual(1, len(subtree))
|
self.assertEqual(1, len(subtree))
|
||||||
@@ -100,21 +101,34 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
repo = self.repo
|
repo = self.repo
|
||||||
b0 = repo.create_blob('1')
|
b0 = repo.create_blob('1')
|
||||||
b1 = repo.create_blob('2')
|
b1 = repo.create_blob('2')
|
||||||
|
st = repo.TreeBuilder()
|
||||||
|
st.insert('a', b0, 0o0100644)
|
||||||
|
subtree = repo[st.write()]
|
||||||
|
|
||||||
t = repo.TreeBuilder()
|
t = repo.TreeBuilder()
|
||||||
t.insert('x', b0, 0o0100644)
|
t.insert('x', b0, 0o0100644)
|
||||||
t.insert('y', b1, 0o0100755)
|
t.insert('y', b1, 0o0100755)
|
||||||
|
t.insert('z', subtree.id, GIT_FILEMODE_TREE)
|
||||||
tree = repo[t.write()]
|
tree = repo[t.write()]
|
||||||
|
|
||||||
self.assertTrue('x' in tree)
|
self.assertTrue('x' in tree)
|
||||||
self.assertTrue('y' in tree)
|
self.assertTrue('y' in tree)
|
||||||
|
self.assertTrue('z' in tree)
|
||||||
|
|
||||||
x = tree['x']
|
x = tree['x']
|
||||||
y = tree['y']
|
y = tree['y']
|
||||||
|
z = tree['z']
|
||||||
self.assertEqual(x.filemode, 0o0100644)
|
self.assertEqual(x.filemode, 0o0100644)
|
||||||
self.assertEqual(y.filemode, 0o0100755)
|
self.assertEqual(y.filemode, 0o0100755)
|
||||||
|
self.assertEqual(z.filemode, GIT_FILEMODE_TREE)
|
||||||
|
|
||||||
self.assertEqual(repo[x.id].id, b0)
|
self.assertEqual(repo[x.id].id, b0)
|
||||||
self.assertEqual(repo[y.id].id, b1)
|
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):
|
def test_modify_tree(self):
|
||||||
|
Reference in New Issue
Block a user