diff --git a/radicale/storage.py b/radicale/storage.py index b3ef778..01f7874 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -40,6 +40,7 @@ from contextlib import contextmanager from hashlib import md5 from importlib import import_module from itertools import chain, groupby +from math import log from random import getrandbits from tempfile import NamedTemporaryFile, TemporaryDirectory @@ -308,6 +309,11 @@ def path_to_filesystem(root, *paths): return safe_path +def left_encode_int(v): + length = int(log(v, 256)) + 1 if v != 0 else 1 + return b"%c%s" % (length, v.to_bytes(length, 'little')) + + class UnsafePathError(ValueError): def __init__(self, path): message = "Can't translate name safely to filesystem: %r" % path @@ -726,6 +732,9 @@ class BaseCollection: return True +ITEM_CACHE_VERSION = 1 + + class Collection(BaseCollection): """Collection stored in several files per calendar.""" @@ -1247,6 +1256,7 @@ class Collection(BaseCollection): def _item_cache_hash(self, raw_text): _hash = md5() + _hash.update(left_encode_int(ITEM_CACHE_VERSION)) _hash.update(raw_text) return _hash.hexdigest()