mirror of
https://github.com/borgbackup/borg.git
synced 2025-02-01 12:09:10 +00:00
hashindex: move common code to Mixin class
This commit is contained in:
parent
742fe74132
commit
f59e0249be
1 changed files with 27 additions and 63 deletions
|
@ -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="<I16s", value_type=FuseVersionsIndexEntry)
|
||||
|
||||
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
|
||||
|
||||
|
||||
NSIndex1Entry = namedtuple('NSIndex1Entry', 'segment offset')
|
||||
|
||||
|
||||
class NSIndex1(MutableMapping):
|
||||
class NSIndex1(HTProxyMixin, MutableMapping):
|
||||
"""
|
||||
Mapping from key256 to (segment32, offset32), as used by legacy repo index of borg 1.x.
|
||||
"""
|
||||
|
@ -121,25 +107,6 @@ class NSIndex1(MutableMapping):
|
|||
if path:
|
||||
self._read(path)
|
||||
|
||||
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 iteritems(self, marker=None):
|
||||
do_yield = marker is None
|
||||
for key, value in self.ht.items():
|
||||
|
@ -148,9 +115,6 @@ class NSIndex1(MutableMapping):
|
|||
else:
|
||||
do_yield = key == marker
|
||||
|
||||
def clear(self):
|
||||
self.ht.clear()
|
||||
|
||||
@classmethod
|
||||
def read(cls, path, permit_compact=False):
|
||||
return cls(path=path)
|
||||
|
|
Loading…
Reference in a new issue