Przeglądaj źródła

Count non-unique chunks deduplicated sizes

Abogical 8 lat temu
rodzic
commit
6ed0746934
1 zmienionych plików z 7 dodań i 3 usunięć
  1. 7 3
      src/borg/helpers.py

+ 7 - 3
src/borg/helpers.py

@@ -19,7 +19,7 @@ import time
 import unicodedata
 import uuid
 from binascii import hexlify
-from collections import namedtuple, deque, abc
+from collections import namedtuple, deque, abc, Counter
 from datetime import datetime, timezone, timedelta
 from fnmatch import translate
 from functools import wraps, partial, lru_cache
@@ -1546,11 +1546,15 @@ class ItemFormatter(BaseFormatter):
 
     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)
+        chunks = item.get('chunks', [])
+        chunks_counter = Counter(c.id for c in chunks)
+        return sum(c.size for c in chunks if chunk_index[c.id].refcount == chunks_counter[c.id])
 
     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)
+        chunks = item.get('chunks', [])
+        chunks_counter = Counter(c.id for c in chunks)
+        return sum(c.csize for c in chunks if chunk_index[c.id].refcount == chunks_counter[c.id])
 
     def hash_item(self, hash_function, item):
         if 'chunks' not in item: