dulwich-users team mailing list archive
-
dulwich-users team
-
Mailing list archive
-
Message #00285
[PATCH 07/28] Use diff.walk_trees for BaseObjectStore.iter_tree_contents.
From: Dave Borowitz <dborowitz@xxxxxxxxxx>
Change-Id: Ia9d0f7ea83af4c3462592fb5f8ec5a5674bfaf95
---
dulwich/object_store.py | 17 +++++------------
dulwich/tests/test_object_store.py | 15 ++++++++-------
2 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/dulwich/object_store.py b/dulwich/object_store.py
index 984f7ad..a772d2f 100644
--- a/dulwich/object_store.py
+++ b/dulwich/object_store.py
@@ -30,6 +30,7 @@ import urllib2
from dulwich.diff import (
tree_changes,
+ walk_trees,
)
from dulwich.errors import (
NotTreeError,
@@ -148,19 +149,11 @@ class BaseObjectStore(object):
:param tree_id: SHA1 of the tree.
:param include_trees: If True, include tree objects in the iteration.
- :return: Yields tuples of (path, mode, hexhsa) for objects in a tree.
+ :yield: TreeEntry namedtuples for all the objects in a tree.
"""
- todo = [('', stat.S_IFDIR, tree_id)]
- while todo:
- path, mode, hexsha = todo.pop()
- is_subtree = stat.S_ISDIR(mode)
- if not is_subtree or include_trees:
- yield path, mode, hexsha
- if is_subtree:
- entries = reversed(list(self[hexsha].iteritems()))
- for name, entry_mode, entry_hexsha in entries:
- entry_path = posixpath.join(path, name)
- todo.append((entry_path, entry_mode, entry_hexsha))
+ for entry, _ in walk_trees(self, tree_id, None):
+ if not stat.S_ISDIR(entry.mode) or include_trees:
+ yield entry
def find_missing_objects(self, haves, wants, progress=None,
get_tagged=None):
diff --git a/dulwich/tests/test_object_store.py b/dulwich/tests/test_object_store.py
index 735e64a..fa4da65 100644
--- a/dulwich/tests/test_object_store.py
+++ b/dulwich/tests/test_object_store.py
@@ -35,6 +35,7 @@ from dulwich.objects import (
ShaFile,
Tag,
Tree,
+ TreeEntry,
)
from dulwich.object_store import (
DiskObjectStore,
@@ -123,7 +124,7 @@ class ObjectStoreTests(object):
('c', blob_c.id, 0100644),
]
tree_id = commit_tree(self.store, blobs)
- self.assertEquals([(p, m, h) for (p, h, m) in blobs],
+ self.assertEquals([TreeEntry(p, m, h) for (p, h, m) in blobs],
list(self.store.iter_tree_contents(tree_id)))
def test_iter_tree_contents_include_trees(self):
@@ -144,12 +145,12 @@ class ObjectStoreTests(object):
tree_bd = self.store[tree_ad['bd'][1]]
expected = [
- ('', 0040000, tree_id),
- ('a', 0100644, blob_a.id),
- ('ad', 0040000, tree_ad.id),
- ('ad/b', 0100644, blob_b.id),
- ('ad/bd', 0040000, tree_bd.id),
- ('ad/bd/c', 0100755, blob_c.id),
+ TreeEntry('', 0040000, tree_id),
+ TreeEntry('a', 0100644, blob_a.id),
+ TreeEntry('ad', 0040000, tree_ad.id),
+ TreeEntry('ad/b', 0100644, blob_b.id),
+ TreeEntry('ad/bd', 0040000, tree_bd.id),
+ TreeEntry('ad/bd/c', 0100755, blob_c.id),
]
actual = self.store.iter_tree_contents(tree_id, include_trees=True)
self.assertEquals(expected, list(actual))
--
1.7.3.2.168.gd6b63
References