# HG changeset patch # User Matt Harbison # Date 1726805049 14400 # Node ID 1d95a87813adea377d956a89ebe7de9800cd9447 # Parent e59e1d8d29d2c9097cc13625fe2b0a511ba2445e typing: add type annotations to the `mercurial.util.filestat` class It's referenced in the `vfs` classes, so get this out of the way to help there. The `TypeVar` definition and its usage was copied from the existing `util.pyi` file. diff -r e59e1d8d29d2 -r 1d95a87813ad mercurial/util.py --- a/mercurial/util.py Fri Sep 20 12:15:08 2024 -0400 +++ b/mercurial/util.py Fri Sep 20 00:04:09 2024 -0400 @@ -45,6 +45,8 @@ List, Optional, Tuple, + Type, + TypeVar, ) from .node import hex @@ -159,6 +161,10 @@ username = platform.username +if typing.TYPE_CHECKING: + _Tfilestat = TypeVar('_Tfilestat', bound='filestat') + + def setumask(val: int) -> None: '''updates the umask. used by chg server''' if pycompat.iswindows: @@ -2491,11 +2497,11 @@ 'exists()' examination on client side of this class. """ - def __init__(self, stat): + def __init__(self, stat: Optional[os.stat_result]) -> None: self.stat = stat @classmethod - def frompath(cls, path): + def frompath(cls: Type[_Tfilestat], path: bytes) -> _Tfilestat: try: stat = os.stat(path) except FileNotFoundError: @@ -2503,13 +2509,13 @@ return cls(stat) @classmethod - def fromfp(cls, fp): + def fromfp(cls: Type[_Tfilestat], fp: BinaryIO) -> _Tfilestat: stat = os.fstat(fp.fileno()) return cls(stat) __hash__ = object.__hash__ - def __eq__(self, old): + def __eq__(self, old) -> bool: try: # if ambiguity between stat of new and old file is # avoided, comparison of size, ctime and mtime is enough @@ -2526,7 +2532,7 @@ except AttributeError: return False - def isambig(self, old): + def isambig(self, old: _Tfilestat) -> bool: """Examine whether new (= self) stat is ambiguous against old one "S[N]" below means stat of a file at N-th change: @@ -2561,7 +2567,7 @@ except AttributeError: return False - def avoidambig(self, path, old): + def avoidambig(self, path: bytes, old: _Tfilestat) -> bool: """Change file stat of specified path to avoid ambiguity 'old' should be previous filestat of 'path'. @@ -2581,7 +2587,7 @@ return False return True - def __ne__(self, other): + def __ne__(self, other) -> bool: return not self == other