store: declare a `files` method on BaseStoreEntry
authorPierre-Yves David <pierre-yves.david@octobus.net>
Mon, 29 May 2023 11:42:16 +0200
changeset 50638 8fc10bfd9887
parent 50637 32837c7e2e4b
child 50639 5e60abf811f3
store: declare a `files` method on BaseStoreEntry This will help pytype to type check. We have to move `StoreFile` earlier in the file to use it in the type declaration.
mercurial/store.py
--- a/mercurial/store.py	Sun May 28 05:23:46 2023 +0200
+++ b/mercurial/store.py	Mon May 29 11:42:16 2023 +0200
@@ -10,7 +10,7 @@
 import os
 import re
 import stat
-from typing import Generator
+from typing import Generator, List
 
 from .i18n import _
 from .pycompat import getattr
@@ -459,12 +459,32 @@
 FILETYPE_OTHER = FILEFLAGS_OTHER
 
 
+@attr.s(slots=True)
+class StoreFile:
+    """a file matching a store entry"""
+
+    unencoded_path = attr.ib()
+    _file_size = attr.ib(default=None)
+    is_volatile = attr.ib(default=False)
+
+    def file_size(self, vfs):
+        if self._file_size is None:
+            try:
+                self._file_size = vfs.stat(self.unencoded_path).st_size
+            except FileNotFoundError:
+                self._file_size = 0
+        return self._file_size
+
+
 @attr.s(slots=True, init=False)
 class BaseStoreEntry:
     """An entry in the store
 
     This is returned by `store.walk` and represent some data in the store."""
 
+    def files(self) -> List[StoreFile]:
+        raise NotImplementedError
+
 
 @attr.s(slots=True, init=False)
 class SimpleStoreEntry(BaseStoreEntry):
@@ -489,7 +509,7 @@
         self._file_size = file_size
         self._files = None
 
-    def files(self):
+    def files(self) -> List[StoreFile]:
         if self._files is None:
             self._files = [
                 StoreFile(
@@ -544,7 +564,7 @@
         """unencoded path of the main revlog file"""
         return self._path_prefix + b'.i'
 
-    def files(self):
+    def files(self) -> List[StoreFile]:
         if self._files is None:
             self._files = []
             for ext in sorted(self._details, key=_ext_key):
@@ -569,23 +589,6 @@
             return filelog.filelog(repo.svfs, self.target_id)
 
 
-@attr.s(slots=True)
-class StoreFile:
-    """a file matching an entry"""
-
-    unencoded_path = attr.ib()
-    _file_size = attr.ib(default=None)
-    is_volatile = attr.ib(default=False)
-
-    def file_size(self, vfs):
-        if self._file_size is None:
-            try:
-                self._file_size = vfs.stat(self.unencoded_path).st_size
-            except FileNotFoundError:
-                self._file_size = 0
-        return self._file_size
-
-
 def _gather_revlog(files_data):
     """group files per revlog prefix