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