]> arthur.barton.de Git - bup.git/commitdiff
_resolve_path: ensure vfs content() iterator is exhausted
authorRob Browning <rlb@defaultvalue.org>
Sun, 5 Nov 2017 18:35:36 +0000 (12:35 -0600)
committerRob Browning <rlb@defaultvalue.org>
Sun, 5 Nov 2017 19:54:01 +0000 (13:54 -0600)
Otherwise we leave git rev-list zombies lying around (spawned by
contents() (revlist_items)).

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
lib/bup/vfs2.py

index 8e9e9fdab57a68b0d0cf348b58255afbe0f4ecc9..a8ba09a53ce14277bd05a1e47da7f5cca2f66b9e 100644 (file)
@@ -681,16 +681,15 @@ def _resolve_path(repo, path, parent=None, want_meta=True, deref=False):
         else:
             parent_name, parent_item = past[-1]
             wanted = (segment,) if not want_meta else ('.', segment)
-            items = contents(repo, parent_item, names=wanted,
-                             want_meta=want_meta)
-            if want_meta:  # First item will be '.' and have the metadata
-                dot, parent_item = next(items)
+            items = tuple(contents(repo, parent_item, names=wanted,
+                                   want_meta=want_meta))
+            if not want_meta:
+                item = items[0][1] if items else None
+            else:  # First item will be '.' and have the metadata
+                item = items[1][1] if len(items) == 2 else None
+                dot, dot_item = items[0]
                 assert dot == '.'
                 past[-1] = parent_name, parent_item
-            item = None
-            # FIXME: content no longer returns anything for missing items
-            if items:
-                _, item = next(items, (None, None))
             if not item:
                 return tuple(past + [(segment, None)])
             mode = item_mode(item)