diff --git a/src/borg/hashindex.pyx b/src/borg/hashindex.pyx index 53ebcf804..0e0ecc913 100644 --- a/src/borg/hashindex.pyx +++ b/src/borg/hashindex.pyx @@ -129,6 +129,7 @@ cdef class IndexBase: def setdefault(self, key, value): if not key in self: self[key] = value + return self[key] def __delitem__(self, key): assert len(key) == self.key_size diff --git a/src/borg/testsuite/hashindex.py b/src/borg/testsuite/hashindex.py index 5fac6f6c4..764de1147 100644 --- a/src/borg/testsuite/hashindex.py +++ b/src/borg/testsuite/hashindex.py @@ -70,6 +70,21 @@ class HashIndexTestCase(BaseTestCase): idx.write(filepath) del idx self.assert_equal(len(cls.read(filepath)), 0) + idx = cls() + # Test setdefault - set non-existing key + idx.setdefault(H(0), make_value(42)) + assert H(0) in idx + assert idx[H(0)] == make_value(42) + # Test setdefault - do not set existing key + idx.setdefault(H(0), make_value(23)) + assert H(0) in idx + assert idx[H(0)] == make_value(42) + # Test setdefault - get-like return value, key not present + assert idx.setdefault(H(1), make_value(23)) == make_value(23) + # Test setdefault - get-like return value, key present + assert idx.setdefault(H(0), make_value(23)) == make_value(42) + # clean up setdefault test + del idx def test_nsindex(self): self._generic_test(NSIndex, lambda x: (x, x),