diff --git a/src/borg/helpers.py b/src/borg/helpers.py index d6c71d054..a96049fbb 100644 --- a/src/borg/helpers.py +++ b/src/borg/helpers.py @@ -1425,12 +1425,14 @@ class ItemFormatter(BaseFormatter): 'source': 'link target for links (identical to linktarget)', 'extra': 'prepends {source} with " -> " for soft links and " link to " for hard links', 'csize': 'compressed size', + 'dsize': 'deduplicated size', + 'dcsize': 'deduplicated compressed size', 'num_chunks': 'number of chunks in this file', 'unique_chunks': 'number of unique chunks in this file', } KEY_GROUPS = ( ('type', 'mode', 'uid', 'gid', 'user', 'group', 'path', 'bpath', 'source', 'linktarget', 'flags'), - ('size', 'csize', 'num_chunks', 'unique_chunks'), + ('size', 'csize', 'dsize', 'dcsize', 'num_chunks', 'unique_chunks'), ('mtime', 'ctime', 'atime', 'isomtime', 'isoctime', 'isoatime'), tuple(sorted(hashlib.algorithms_guaranteed)), ('archiveid', 'archivename', 'extra'), @@ -1479,6 +1481,8 @@ class ItemFormatter(BaseFormatter): self.call_keys = { 'size': self.calculate_size, 'csize': self.calculate_csize, + 'dsize': self.calculate_dsize, + 'dcsize': self.calculate_dcsize, 'num_chunks': self.calculate_num_chunks, 'unique_chunks': self.calculate_unique_chunks, 'isomtime': partial(self.format_time, 'mtime'), @@ -1540,6 +1544,14 @@ class ItemFormatter(BaseFormatter): def calculate_csize(self, item): return sum(c.csize for c in item.get('chunks', [])) + def calculate_dsize(self, item): + chunk_index = self.archive.cache.chunks + return sum(c.size for c in item.get('chunks', []) if chunk_index[c.id].refcount == 1) + + def calculate_dcsize(self, item): + chunk_index = self.archive.cache.chunks + return sum(c.csize for c in item.get('chunks', []) if chunk_index[c.id].refcount == 1) + def hash_item(self, hash_function, item): if 'chunks' not in item: return ""