From e4145544e364100552ab7adae7abf0ec41054b34 Mon Sep 17 00:00:00 2001 From: Rob Browning Date: Sat, 9 Dec 2017 10:51:10 -0600 Subject: [PATCH] vfs2: add tree_data_reader for use by cat-file 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 Tested-by: Rob Browning --- lib/bup/vfs2.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/bup/vfs2.py b/lib/bup/vfs2.py index ece4eb0..421b6cb 100644 --- a/lib/bup/vfs2.py +++ b/lib/bup/vfs2.py @@ -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) -- 2.39.2