diff --git a/hgext/remotefilelog/debugcommands.py b/hgext/remotefilelog/debugcommands.py --- a/hgext/remotefilelog/debugcommands.py +++ b/hgext/remotefilelog/debugcommands.py @@ -62,7 +62,7 @@ def debugremotefilelog(ui, path, **opts) queue.append(p2) -def buildtemprevlog(repo, file): +def buildtemprevlog(repo, file) -> filelog.FileLog: # get filename key filekey = hex(hashutil.sha1(file).digest()) filedir = os.path.join(repo.path, b'store/data', filekey) diff --git a/hgext/remotefilelog/remotefilelog.py b/hgext/remotefilelog/remotefilelog.py --- a/hgext/remotefilelog/remotefilelog.py +++ b/hgext/remotefilelog/remotefilelog.py @@ -8,6 +8,10 @@ import collections +from typing import ( + Iterator, +) + from mercurial.node import bin from mercurial.i18n import _ from mercurial import ( @@ -296,7 +300,7 @@ class remotefilelog: deltamode=None, sidedata_helpers=None, debug_info=None, - ): + ) -> Iterator[revlog.RevLogRevisionDelta]: # we don't use any of these parameters here del nodesorder, revisiondata, assumehaveparentrevisions, deltaprevious del deltamode diff --git a/mercurial/filelog.py b/mercurial/filelog.py --- a/mercurial/filelog.py +++ b/mercurial/filelog.py @@ -8,6 +8,11 @@ import typing +from typing import ( + Iterable, + Iterator, +) + from .i18n import _ from .node import nullrev from . import ( @@ -26,6 +31,10 @@ from .revlogutils import ( class FileLog: + _revlog: revlog.revlog + nullid: bytes + _fix_issue6528: bool + def __init__(self, opener, path, try_split=False): self._revlog = revlog.revlog( opener, @@ -43,7 +52,7 @@ class FileLog: opts = opener.options self._fix_issue6528 = opts.get(b'issue6528.fix-incoming', True) - def get_revlog(self): + def get_revlog(self) -> revlog.revlog: """return an actual revlog instance if any This exist because a lot of code leverage the fact the underlying @@ -52,10 +61,10 @@ class FileLog: """ return self._revlog - def __len__(self): + def __len__(self) -> int: return len(self._revlog) - def __iter__(self): + def __iter__(self) -> Iterator[int]: return self._revlog.__iter__() def hasnode(self, node): @@ -234,7 +243,7 @@ class FileLog: """ return not storageutil.filedataequivalent(self, node, text) - def verifyintegrity(self, state): + def verifyintegrity(self, state) -> Iterable[revlog.RevLogProblem]: return self._revlog.verifyintegrity(state) def storageinfo( diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -850,6 +850,12 @@ def _splittopdir(f: bytes) -> Tuple[byte class TreeManifest: + _dir: bytes + _dirs: Dict[bytes, 'TreeManifest'] + _dirty: bool + _files: Dict[bytes, bytes] + _flags: Dict[bytes, bytes] + def __init__(self, nodeconstants, dir: bytes = b'', text: bytes = b''): self._dir = dir self.nodeconstants = nodeconstants @@ -858,13 +864,13 @@ class TreeManifest: self._loadfunc = _noop self._copyfunc = _noop self._dirty = False - self._dirs: Dict[bytes, 'TreeManifest'] = {} + self._dirs = {} self._lazydirs: Dict[ bytes, Tuple[bytes, Callable[[bytes, bytes], 'TreeManifest'], bool], ] = {} # Using _lazymanifest here is a little slower than plain old dicts - self._files: Dict[bytes, bytes] = {} + self._files = {} self._flags = {} if text: @@ -2172,6 +2178,8 @@ if typing.TYPE_CHECKING: class MemManifestCtx: + _manifestdict: ManifestDict + def __init__(self, manifestlog): self._manifestlog = manifestlog self._manifestdict = manifestdict(manifestlog.nodeconstants.nodelen) @@ -2213,6 +2221,8 @@ class ManifestCtx: contents, its parent revs, and its linkrev. """ + _data: Optional[ManifestDict] + def __init__(self, manifestlog, node): self._manifestlog = manifestlog self._data = None @@ -2375,6 +2385,8 @@ if typing.TYPE_CHECKING: class MemTreeManifestCtx: + _treemanifest: TreeManifest + def __init__(self, manifestlog, dir=b''): self._manifestlog = manifestlog self._dir = dir @@ -2417,6 +2429,8 @@ if typing.TYPE_CHECKING: class TreeManifestCtx: + _data: Optional[TreeManifest] + def __init__(self, manifestlog, dir, node): self._manifestlog = manifestlog self._dir = dir @@ -2699,6 +2713,9 @@ class excludeddir(treemanifest): whose contents are unknown. """ + _files: Dict[bytes, bytes] + _flags: Dict[bytes, bytes] + def __init__(self, nodeconstants, dir, node): super(excludeddir, self).__init__(nodeconstants, dir) self._node = node diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -25,6 +25,8 @@ import weakref import zlib from typing import ( + Iterable, + Iterator, Optional, Tuple, ) @@ -1826,7 +1828,7 @@ class revlog: def __len__(self): return len(self.index) - def __iter__(self): + def __iter__(self) -> Iterator[int]: return iter(range(len(self))) def revs(self, start=0, stop=None): @@ -3902,7 +3904,7 @@ class revlog: else: rewrite.v2_censor(self, tr, censor_nodes, tombstone) - def verifyintegrity(self, state): + def verifyintegrity(self, state) -> Iterable[RevLogProblem]: """Verifies the integrity of the revlog. Yields ``revlogproblem`` instances describing problems that are diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -160,6 +160,8 @@ class statichttprepository( ): supported = localrepo.localrepository._basesupported + manifestlog: manifest.ManifestLog + def __init__(self, ui, path): self._url = path self.ui = ui diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -817,7 +817,7 @@ class basicstore: concurrencychecker=concurrencychecker, ) - def manifestlog(self, repo, storenarrowmatch): + def manifestlog(self, repo, storenarrowmatch) -> manifest.ManifestLog: rootstore = manifest.manifestrevlog(repo.nodeconstants, self.vfs) return manifest.manifestlog(self.vfs, repo, rootstore, storenarrowmatch) diff --git a/mercurial/unionrepo.py b/mercurial/unionrepo.py --- a/mercurial/unionrepo.py +++ b/mercurial/unionrepo.py @@ -204,6 +204,9 @@ class unionchangelog(unionrevlog, change class unionmanifest(unionrevlog, manifest.manifestrevlog): + repotiprev: int + revlog2: manifest.ManifestRevlog + def __init__(self, nodeconstants, opener, opener2, linkmapper): # XXX manifestrevlog is not actually a revlog , so mixing it with # bundlerevlog is not a good idea. @@ -215,6 +218,10 @@ class unionmanifest(unionrevlog, manifes class unionfilelog(filelog.filelog): + _revlog: unionrevlog + repotiprev: int + revlog2: revlog.revlog + def __init__(self, opener, path, opener2, linkmapper, repo): filelog.filelog.__init__(self, opener, path) filelog2 = filelog.filelog(opener2, path)