mercurial/store.py
changeset 50631 b59e0a4f692f
parent 50629 309cbd8400ae
child 50632 786443bd3bc1
--- a/mercurial/store.py	Sat May 27 04:22:18 2023 +0200
+++ b/mercurial/store.py	Sun May 28 03:46:48 2023 +0200
@@ -475,6 +475,7 @@
     _entry_path = attr.ib()
     _is_volatile = attr.ib(default=False)
     _file_size = attr.ib(default=None)
+    _files = attr.ib(default=None)
 
     def __init__(
         self,
@@ -486,15 +487,18 @@
         self._entry_path = entry_path
         self._is_volatile = is_volatile
         self._file_size = file_size
+        self._files = None
 
     def files(self):
-        return [
-            StoreFile(
-                unencoded_path=self._entry_path,
-                file_size=self._file_size,
-                is_volatile=self._is_volatile,
-            )
-        ]
+        if self._files is None:
+            self._files = [
+                StoreFile(
+                    unencoded_path=self._entry_path,
+                    file_size=self._file_size,
+                    is_volatile=self._is_volatile,
+                )
+            ]
+        return self._files
 
 
 @attr.s(slots=True, init=False)
@@ -507,6 +511,7 @@
     target_id = attr.ib(default=None)
     _path_prefix = attr.ib(default=None)
     _details = attr.ib(default=None)
+    _files = attr.ib(default=None)
 
     def __init__(
         self,
@@ -521,6 +526,7 @@
         self._path_prefix = path_prefix
         assert b'.i' in details, (path_prefix, details)
         self._details = details
+        self._files = None
 
     @property
     def is_changelog(self):
@@ -539,12 +545,13 @@
         return self._path_prefix + b'.i'
 
     def files(self):
-        files = []
-        for ext in sorted(self._details, key=_ext_key):
-            path = self._path_prefix + ext
-            data = self._details[ext]
-            files.append(StoreFile(unencoded_path=path, **data))
-        return files
+        if self._files is None:
+            self._files = []
+            for ext in sorted(self._details, key=_ext_key):
+                path = self._path_prefix + ext
+                data = self._details[ext]
+                self._files.append(StoreFile(unencoded_path=path, **data))
+        return self._files
 
     def get_revlog_instance(self, repo):
         """Obtain a revlog instance from this store entry