# HG changeset patch # User Pierre-Yves David # Date 1685353336 -7200 # Node ID 8fc10bfd9887e622418550f25e65936b10ca13ea # Parent 32837c7e2e4b4ba1ebb74477e4db2e8266c5cc50 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. diff -r 32837c7e2e4b -r 8fc10bfd9887 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