diff --git a/CONTRIBUTORS b/CONTRIBUTORS --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,3 +1,4 @@ Daniele Serafini Ishan Bhanuka Antoine Cezar +Pierre-Yves David diff --git a/swh/model/from_disk.py b/swh/model/from_disk.py --- a/swh/model/from_disk.py +++ b/swh/model/from_disk.py @@ -401,7 +401,7 @@ for instance when the client is applying diffs. """ - __slots__ = ["__entries"] + __slots__ = ["__entries", "__model_object"] object_type: Final = "directory" @classmethod @@ -447,9 +447,11 @@ def __init__(self, data=None): super().__init__(data=data) self.__entries = None + self.__model_object = None def invalidate_hash(self): self.__entries = None + self.__model_object = None super().invalidate_hash() @staticmethod @@ -497,12 +499,14 @@ return CoreSWHID(object_type=ObjectType.DIRECTORY, object_id=self.hash) def compute_hash(self): - return model.Directory.from_dict({"entries": self.entries}).id + return self.to_model().id def to_model(self) -> model.Directory: """Builds a `model.Directory` object based on this node; ignoring its children.""" - return model.Directory.from_dict(self.get_data()) + if self.__model_object is None: + self.__model_object = model.Directory.from_dict({"entries": self.entries}) + return self.__model_object def __getitem__(self, key): if not isinstance(key, bytes):