diff --git a/attic/archive.py b/attic/archive.py index d78a7fdb3..de9553db7 100644 --- a/attic/archive.py +++ b/attic/archive.py @@ -14,6 +14,7 @@ import sys import time from io import BytesIO from attic import xattr +from attic.cache import Cache from attic.platform import acl_get, acl_set from attic.chunker import Chunker from attic.hashindex import ChunkIndex @@ -206,19 +207,22 @@ class Archive: self.repository.commit() self.cache.commit() - def calc_stats(self, cache): + def calc_stats(self): def add(id): - count, size, csize = self.cache.chunks[id] + count, size, csize = cache.chunks[id] stats.update(size, csize, count == 1) - self.cache.chunks[id] = count - 1, size, csize + cache.chunks[id] = count - 1, size, csize # dirties cache.chunks! + def add_file_chunks(chunks): for id, _, _ in chunks: add(id) + # This function is a bit evil since it abuses the cache to calculate - # the stats. The cache transaction must be rolled back afterwards - unpacker = msgpack.Unpacker(use_list=False) + # the stats. The cache transaction must be rolled back afterwards. + cache = Cache(self.repository, self.key, self.manifest) cache.begin_txn() stats = Statistics() + unpacker = msgpack.Unpacker(use_list=False) add(self.id) for id, chunk in zip(self.metadata[b'items'], self.repository.get_many(self.metadata[b'items'])): add(id) diff --git a/attic/archiver.py b/attic/archiver.py index 7295ac06e..95a9129cc 100644 --- a/attic/archiver.py +++ b/attic/archiver.py @@ -305,7 +305,7 @@ Type "Yes I am sure" if you understand this and want to continue.\n""") manifest, key = Manifest.load(repository) cache = Cache(repository, key, manifest) archive = Archive(repository, key, manifest, args.archive.archive, cache=cache) - stats = archive.calc_stats(cache) + stats = archive.calc_stats() print('Name:', archive.name) print('Fingerprint: %s' % hexlify(archive.id).decode('ascii')) print('Hostname:', archive.metadata[b'hostname'])