Rev 4399: (igc) make recursion optional in iter-entries() in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Wed Jun 3 01:49:23 BST 2009
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 4399
revision-id: pqm at pqm.ubuntu.com-20090603004918-k6xr5guhlh4f2dd7
parent: pqm at pqm.ubuntu.com-20090602153906-1q6bresxw669b34i
parent: ian.clatworthy at canonical.com-20090602235306-d4x63bjkzjt2ic2c
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2009-06-03 01:49:18 +0100
message:
(igc) make recursion optional in iter-entries()
modified:
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/tests/inventory_implementations/basics.py basics.py-20070903044446-kdjwbiu1p1zi9phs-1
------------------------------------------------------------
revno: 4398.1.1
revision-id: ian.clatworthy at canonical.com-20090602235306-d4x63bjkzjt2ic2c
parent: pqm at pqm.ubuntu.com-20090602153906-1q6bresxw669b34i
parent: ian.clatworthy at canonical.com-20090518031238-vhtj20agsx2ygiu2
committer: Ian Clatworthy <ian.clatworthy at canonical.com>
branch nick: integration
timestamp: Wed 2009-06-03 09:53:06 +1000
message:
(igc) make recursion optional in iter-entries()
modified:
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/tests/inventory_implementations/basics.py basics.py-20070903044446-kdjwbiu1p1zi9phs-1
------------------------------------------------------------
revno: 4370.5.1
revision-id: ian.clatworthy at canonical.com-20090518031238-vhtj20agsx2ygiu2
parent: pqm at pqm.ubuntu.com-20090516091716-x8ozyp5uuvsgmsfg
committer: Ian Clatworthy <ian.clatworthy at canonical.com>
branch nick: iter-entries-norecurse
timestamp: Mon 2009-05-18 13:12:38 +1000
message:
add recursive parameter to iter_entries()
modified:
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/tests/inventory_implementations/basics.py basics.py-20070903044446-kdjwbiu1p1zi9phs-1
=== modified file 'bzrlib/inventory.py'
--- a/bzrlib/inventory.py 2009-05-26 10:08:17 +0000
+++ b/bzrlib/inventory.py 2009-06-02 23:53:06 +0000
@@ -747,8 +747,13 @@
[parent.name for parent in
self._iter_file_id_parents(file_id)][:-1]))
- def iter_entries(self, from_dir=None):
- """Return (path, entry) pairs, in order by name."""
+ def iter_entries(self, from_dir=None, recursive=True):
+ """Return (path, entry) pairs, in order by name.
+
+ :param from_dir: if None, start from the root,
+ otherwise start from this directory (either file-id or entry)
+ :param recursive: recurse into directories or not
+ """
if from_dir is None:
if self.root is None:
return
@@ -761,6 +766,10 @@
# 440ms/663ms (inline/total) to 116ms/116ms
children = from_dir.children.items()
children.sort()
+ if not recursive:
+ for name, ie in children:
+ yield name, ie
+ return
children = collections.deque(children)
stack = [(u'', children)]
while stack:
=== modified file 'bzrlib/tests/inventory_implementations/basics.py'
--- a/bzrlib/tests/inventory_implementations/basics.py 2009-04-09 20:23:07 +0000
+++ b/bzrlib/tests/inventory_implementations/basics.py 2009-05-18 03:12:38 +0000
@@ -211,8 +211,12 @@
('doc', 'directory', 'doc-id'),
('src/hello.c', 'file', 'hello-id'),
('src/bye.c', 'file', 'bye-id'),
+ ('src/sub', 'directory', 'sub-id'),
+ ('src/sub/a', 'file', 'a-id'),
('Makefile', 'file', 'makefile-id')]:
inv.add_path(*args)
+
+ # Test all entries
self.assertEqual([
('', 'tree-root'),
('Makefile', 'makefile-id'),
@@ -220,8 +224,36 @@
('src', 'src-id'),
('src/bye.c', 'bye-id'),
('src/hello.c', 'hello-id'),
+ ('src/sub', 'sub-id'),
+ ('src/sub/a', 'a-id'),
], [(path, ie.file_id) for path, ie in inv.iter_entries()])
+ # Test a subdirectory
+ self.assertEqual([
+ ('bye.c', 'bye-id'),
+ ('hello.c', 'hello-id'),
+ ('sub', 'sub-id'),
+ ('sub/a', 'a-id'),
+ ], [(path, ie.file_id) for path, ie in inv.iter_entries(
+ from_dir='src-id')])
+
+ # Test not recursing at the root level
+ self.assertEqual([
+ ('', 'tree-root'),
+ ('Makefile', 'makefile-id'),
+ ('doc', 'doc-id'),
+ ('src', 'src-id'),
+ ], [(path, ie.file_id) for path, ie in inv.iter_entries(
+ recursive=False)])
+
+ # Test not recursing at a subdirectory level
+ self.assertEqual([
+ ('bye.c', 'bye-id'),
+ ('hello.c', 'hello-id'),
+ ('sub', 'sub-id'),
+ ], [(path, ie.file_id) for path, ie in inv.iter_entries(
+ from_dir='src-id', recursive=False)])
+
def test_iter_just_entries(self):
inv = self.make_inventory('tree-root')
for args in [('src', 'directory', 'src-id'),
More information about the bazaar-commits
mailing list