From f59e0249be9a346095a7b490f1b1638a3a38d7ae Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 26 Oct 2024 20:16:23 +0200 Subject: [PATCH] hashindex: move common code to Mixin class --- src/borg/hashindex.pyx | 90 +++++++++++++----------------------------- 1 file changed, 27 insertions(+), 63 deletions(-) diff --git a/src/borg/hashindex.pyx b/src/borg/hashindex.pyx index af8a4565e..e51adc125 100644 --- a/src/borg/hashindex.pyx +++ b/src/borg/hashindex.pyx @@ -10,10 +10,34 @@ API_VERSION = '1.2_01' cdef _NoDefault = object() +class HTProxyMixin: + def __setitem__(self, key, value): + self.ht[key] = value + + def __getitem__(self, key): + return self.ht[key] + + def __delitem__(self, key): + del self.ht[key] + + def __contains__(self, key): + return key in self.ht + + def __len__(self): + return len(self.ht) + + def __iter__(self): + for key, value in self.ht.items(): + yield key + + def clear(self): + self.ht.clear() + + ChunkIndexEntry = namedtuple('ChunkIndexEntry', 'refcount size') -class ChunkIndex(MutableMapping): +class ChunkIndex(HTProxyMixin, MutableMapping): """ Mapping from key256 to (refcount32, size32) to track chunks in the repository. """ @@ -32,22 +56,6 @@ class ChunkIndex(MutableMapping): value = ChunkIndexEntry(*value) self.ht[key] = value - def __getitem__(self, key): - return self.ht[key] - - def __delitem__(self, key): - del self.ht[key] - - def __contains__(self, key): - return key in self.ht - - def __len__(self): - return len(self.ht) - - def __iter__(self): - for key, value in self.ht.items(): - yield key - def iteritems(self): yield from self.ht.items() @@ -56,9 +64,6 @@ class ChunkIndex(MutableMapping): refcount = min(self.MAX_VALUE, v.refcount + refs) self[key] = v._replace(refcount=refcount, size=size) - def clear(self): - self.ht.clear() - @classmethod def read(cls, path, permit_compact=False): return cls(path=path) @@ -73,37 +78,18 @@ class ChunkIndex(MutableMapping): FuseVersionsIndexEntry = namedtuple('FuseVersionsIndexEntry', 'version hash') -class FuseVersionsIndex(MutableMapping): +class FuseVersionsIndex(HTProxyMixin, MutableMapping): """ Mapping from key128 to (file_version32, file_content_hash128) to support the FUSE versions view. """ def __init__(self): self.ht = HashTableNT(key_size=16, value_format="