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.
--- 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