]> arthur.barton.de Git - bup.git/commitdiff
vfs2: add tree_data_reader for use by cat-file
authorRob Browning <rlb@defaultvalue.org>
Sat, 9 Dec 2017 16:51:10 +0000 (10:51 -0600)
committerRob Browning <rlb@defaultvalue.org>
Sat, 23 Dec 2017 20:27:22 +0000 (14:27 -0600)
The cat-file command needs to be able to read arbitrary oids (chunked
or not) for --bupm, so add tree_data_reader for that purpose and
adjust fopen() to depend on it.

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

index ece4eb0a27b307ff01c4fab7c19fb2516726bd6f..421b6cb32db7733b9983e79228b4e7646d4902d1 100644 (file)
@@ -146,6 +146,7 @@ class _ChunkReader:
 
 class _FileReader(object):
     def __init__(self, repo, oid, known_size=None):
+        assert len(oid) == 20
         self.oid = oid
         self.ofs = 0
         self.reader = None
@@ -323,11 +324,15 @@ def item_size(repo, item):
         return m.size
     return _compute_item_size(repo, item)
 
+def tree_data_reader(repo, oid):
+    """Return an open reader for all of the data contained within oid.  If
+    oid refers to a tree, recursively concatenate all of its contents."""
+    return _FileReader(repo, oid)
+
 def fopen(repo, item):
     """Return an open reader for the given file item."""
-    assert repo
     assert S_ISREG(item_mode(item))
-    return _FileReader(repo, item.oid)
+    return tree_data_reader(repo, item.oid)
 
 def _commit_item_from_data(oid, data):
     info = parse_commit(data)