From b5d7f1df26391b71ac789bf13d2a81af4b00d3a2 Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Thu, 25 Aug 2016 01:12:30 +0200 Subject: [PATCH] extract: fix incorrect progress output for hard links this produces correct output if any (non proper) subset of hardlinks are extracted. --- src/borg/archiver.py | 2 +- src/borg/item.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/borg/archiver.py b/src/borg/archiver.py index d3a8f76d7..cf2f233f1 100644 --- a/src/borg/archiver.py +++ b/src/borg/archiver.py @@ -459,7 +459,7 @@ class Archiver: if progress: progress_logger = logging.getLogger(ProgressIndicatorPercent.LOGGER) progress_logger.info('Calculating size') - extracted_size = sum(item.file_size() for item in archive.iter_items(filter)) + extracted_size = sum(item.file_size(hardlink_masters) for item in archive.iter_items(filter)) pi = ProgressIndicatorPercent(total=extracted_size, msg='Extracting files %5.1f%%', step=0.1) else: pi = None diff --git a/src/borg/item.py b/src/borg/item.py index 0bc336239..052478705 100644 --- a/src/borg/item.py +++ b/src/borg/item.py @@ -157,10 +157,13 @@ class Item(PropDict): part = PropDict._make_property('part', int) - def file_size(self): - if 'chunks' not in self: + def file_size(self, hardlink_masters=None): + hardlink_masters = hardlink_masters or {} + chunks, _ = hardlink_masters.get(self.get('source'), (None, None)) + chunks = self.get('chunks', chunks) + if chunks is None: return 0 - return sum(chunk.size for chunk in self.chunks) + return sum(chunk.size for chunk in chunks) class EncryptedKey(PropDict):