mercurial/localrepo.py
changeset 51891 ee7e106b372b
parent 51859 f4733654f144
child 51897 f0e07efc199f
--- a/mercurial/localrepo.py	Mon Sep 23 14:58:37 2024 -0400
+++ b/mercurial/localrepo.py	Fri Sep 20 21:31:58 2024 -0400
@@ -14,6 +14,7 @@
 import re
 import sys
 import time
+import typing
 import weakref
 
 from concurrent import futures
@@ -255,8 +256,7 @@
 legacycaps = moderncaps.union({b'changegroupsubset'})
 
 
-@interfaceutil.implementer(repository.ipeercommandexecutor)
-class localcommandexecutor:
+class LocalCommandExecutor:
     def __init__(self, peer):
         self._peer = peer
         self._sent = False
@@ -301,12 +301,20 @@
         self._closed = True
 
 
-@interfaceutil.implementer(repository.ipeercommands)
-class localpeer(repository.peer):
+localcommandexecutor = interfaceutil.implementer(
+    repository.ipeercommandexecutor
+)(LocalCommandExecutor)
+
+if typing.TYPE_CHECKING:
+    # Help pytype by hiding the interface stuff that confuses it.
+    localcommandexecutor = LocalCommandExecutor
+
+
+class LocalPeer(repository.peer):
     '''peer for a local repo; reflects only the most recent API'''
 
     def __init__(self, repo, caps=None, path=None, remotehidden=False):
-        super(localpeer, self).__init__(
+        super(LocalPeer, self).__init__(
             repo.ui, path=path, remotehidden=remotehidden
         )
 
@@ -456,13 +464,19 @@
     # End of peer interface.
 
 
-@interfaceutil.implementer(repository.ipeerlegacycommands)
-class locallegacypeer(localpeer):
+localpeer = interfaceutil.implementer(repository.ipeercommands)(LocalPeer)
+
+if typing.TYPE_CHECKING:
+    # Help pytype by hiding the interface stuff that confuses it.
+    localpeer = LocalPeer
+
+
+class LocalLegacyPeer(localpeer):
     """peer extension which implements legacy methods too; used for tests with
     restricted capabilities"""
 
     def __init__(self, repo, path=None, remotehidden=False):
-        super(locallegacypeer, self).__init__(
+        super(LocalLegacyPeer, self).__init__(
             repo, caps=legacycaps, path=path, remotehidden=remotehidden
         )
 
@@ -489,6 +503,14 @@
     # End of baselegacywirecommands interface.
 
 
+locallegacypeer = interfaceutil.implementer(repository.ipeerlegacycommands)(
+    LocalLegacyPeer
+)
+
+if typing.TYPE_CHECKING:
+    # Help pytype by hiding the interface stuff that confuses it.
+    locallegacypeer = LocalLegacyPeer
+
 # Functions receiving (ui, features) that extensions can register to impact
 # the ability to load repositories with custom requirements. Only
 # functions defined in loaded extensions are called.
@@ -1241,8 +1263,7 @@
     return localrepository
 
 
-@interfaceutil.implementer(repository.ilocalrepositoryfilestorage)
-class revlogfilestorage:
+class RevlogFileStorage:
     """File storage when using revlogs."""
 
     def file(self, path):
@@ -1257,8 +1278,16 @@
         return filelog.filelog(self.svfs, path, try_split=try_split)
 
 
-@interfaceutil.implementer(repository.ilocalrepositoryfilestorage)
-class revlognarrowfilestorage:
+revlogfilestorage = interfaceutil.implementer(
+    repository.ilocalrepositoryfilestorage
+)(RevlogFileStorage)
+
+if typing.TYPE_CHECKING:
+    # Help pytype by hiding the interface stuff that confuses it.
+    revlogfilestorage = RevlogFileStorage
+
+
+class RevlogNarrowFileStorage:
     """File storage when using revlogs and narrow files."""
 
     def file(self, path):
@@ -1274,6 +1303,15 @@
         )
 
 
+revlognarrowfilestorage = interfaceutil.implementer(
+    repository.ilocalrepositoryfilestorage
+)(RevlogNarrowFileStorage)
+
+if typing.TYPE_CHECKING:
+    # Help pytype by hiding the interface stuff that confuses it.
+    revlognarrowfilestorage = RevlogNarrowFileStorage
+
+
 def makefilestorage(requirements, features, **kwargs):
     """Produce a type conforming to ``ilocalrepositoryfilestorage``."""
     features.add(repository.REPO_FEATURE_REVLOG_FILE_STORAGE)
@@ -1295,9 +1333,16 @@
     (repository.ilocalrepositoryfilestorage, lambda: makefilestorage),
 ]
 
-
-@interfaceutil.implementer(repository.ilocalrepositorymain)
-class localrepository:
+_localrepo_base_classes = object
+
+if typing.TYPE_CHECKING:
+    _localrepo_base_classes = [
+        repository.ilocalrepositorymain,
+        repository.ilocalrepositoryfilestorage,
+    ]
+
+
+class LocalRepository(_localrepo_base_classes):
     """Main class for representing local repositories.
 
     All local repositories are instances of this class.
@@ -3598,6 +3643,15 @@
         self._sidedata_computers[kind][category] = (keys, computer, flags)
 
 
+localrepository = interfaceutil.implementer(repository.ilocalrepositorymain)(
+    LocalRepository
+)
+
+if typing.TYPE_CHECKING:
+    # Help pytype by hiding the interface stuff that confuses it.
+    localrepository = LocalRepository
+
+
 def undoname(fn: bytes) -> bytes:
     base, name = os.path.split(fn)
     assert name.startswith(b'journal')