interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
This is the same transformation as b455dfddfed0 did for dirstate. This is also
the last of the `interfaceutil.Attribute` style attributes.
--- a/mercurial/interfaces/repository.py Tue Oct 22 22:56:10 2024 -0400
+++ b/mercurial/interfaces/repository.py Tue Oct 22 23:14:32 2024 -0400
@@ -13,21 +13,27 @@
from typing import (
Any,
+ Callable,
Collection,
+ Mapping,
Protocol,
)
from ..i18n import _
from .. import error
-from . import util as interfaceutil
if typing.TYPE_CHECKING:
# Almost all mercurial modules are only imported in the type checking phase
# to avoid circular imports
+ from .. import (
+ util,
+ )
from ..utils import (
urlutil,
)
+ from . import dirstate as intdirstate
+
# TODO: make a protocol class for this
NodeConstants = Any
@@ -1632,132 +1638,119 @@
This currently captures the reality of things - not how things should be.
"""
- nodeconstants = interfaceutil.Attribute(
- """Constant nodes matching the hash function used by the repository."""
- )
- nullid = interfaceutil.Attribute(
- """null revision for the hash function used by the repository."""
- )
-
- supported = interfaceutil.Attribute(
- """Set of requirements that this repo is capable of opening."""
- )
-
- requirements = interfaceutil.Attribute(
- """Set of requirements this repo uses."""
- )
-
- features = interfaceutil.Attribute(
- """Set of "features" this repository supports.
-
- A "feature" is a loosely-defined term. It can refer to a feature
- in the classical sense or can describe an implementation detail
- of the repository. For example, a ``readonly`` feature may denote
- the repository as read-only. Or a ``revlogfilestore`` feature may
- denote that the repository is using revlogs for file storage.
-
- The intent of features is to provide a machine-queryable mechanism
- for repo consumers to test for various repository characteristics.
-
- Features are similar to ``requirements``. The main difference is that
- requirements are stored on-disk and represent requirements to open the
- repository. Features are more run-time capabilities of the repository
- and more granular capabilities (which may be derived from requirements).
- """
- )
-
- filtername = interfaceutil.Attribute(
- """Name of the repoview that is active on this repo."""
- )
-
- vfs_map = interfaceutil.Attribute(
- """a bytes-key → vfs mapping used by transaction and others"""
- )
-
- wvfs = interfaceutil.Attribute(
- """VFS used to access the working directory."""
- )
-
- vfs = interfaceutil.Attribute(
- """VFS rooted at the .hg directory.
-
- Used to access repository data not in the store.
- """
- )
-
- svfs = interfaceutil.Attribute(
- """VFS rooted at the store.
-
- Used to access repository data in the store. Typically .hg/store.
- But can point elsewhere if the store is shared.
- """
- )
-
- root = interfaceutil.Attribute(
- """Path to the root of the working directory."""
- )
-
- path = interfaceutil.Attribute("""Path to the .hg directory.""")
-
- origroot = interfaceutil.Attribute(
- """The filesystem path that was used to construct the repo."""
- )
-
- auditor = interfaceutil.Attribute(
- """A pathauditor for the working directory.
-
- This checks if a path refers to a nested repository.
-
- Operates on the filesystem.
- """
- )
-
- nofsauditor = interfaceutil.Attribute(
- """A pathauditor for the working directory.
-
- This is like ``auditor`` except it doesn't do filesystem checks.
- """
- )
-
- baseui = interfaceutil.Attribute(
- """Original ui instance passed into constructor."""
- )
-
- ui = interfaceutil.Attribute("""Main ui instance for this instance.""")
-
- sharedpath = interfaceutil.Attribute(
- """Path to the .hg directory of the repo this repo was shared from."""
- )
-
- store = interfaceutil.Attribute("""A store instance.""")
-
- spath = interfaceutil.Attribute("""Path to the store.""")
-
- sjoin = interfaceutil.Attribute("""Alias to self.store.join.""")
-
- cachevfs = interfaceutil.Attribute(
- """A VFS used to access the cache directory.
-
- Typically .hg/cache.
- """
- )
-
- wcachevfs = interfaceutil.Attribute(
- """A VFS used to access the cache directory dedicated to working copy
-
- Typically .hg/wcache.
- """
- )
-
- filteredrevcache = interfaceutil.Attribute(
- """Holds sets of revisions to be filtered."""
- )
-
- names = interfaceutil.Attribute("""A ``namespaces`` instance.""")
-
- filecopiesmode = interfaceutil.Attribute(
- """The way files copies should be dealt with in this repo."""
- )
+ nodeconstants: NodeConstants
+ """Constant nodes matching the hash function used by the repository."""
+
+ nullid: bytes
+ """null revision for the hash function used by the repository."""
+
+ supported: set[bytes]
+ """Set of requirements that this repo is capable of opening."""
+
+ requirements: set[bytes]
+ """Set of requirements this repo uses."""
+
+ features: set[bytes]
+ """Set of "features" this repository supports.
+
+ A "feature" is a loosely-defined term. It can refer to a feature
+ in the classical sense or can describe an implementation detail
+ of the repository. For example, a ``readonly`` feature may denote
+ the repository as read-only. Or a ``revlogfilestore`` feature may
+ denote that the repository is using revlogs for file storage.
+
+ The intent of features is to provide a machine-queryable mechanism
+ for repo consumers to test for various repository characteristics.
+
+ Features are similar to ``requirements``. The main difference is that
+ requirements are stored on-disk and represent requirements to open the
+ repository. Features are more run-time capabilities of the repository
+ and more granular capabilities (which may be derived from requirements).
+ """
+
+ filtername: bytes
+ """Name of the repoview that is active on this repo."""
+
+ vfs_map: Mapping[bytes, Vfs]
+ """a bytes-key → vfs mapping used by transaction and others"""
+
+ wvfs: Vfs
+ """VFS used to access the working directory."""
+
+ vfs: Vfs
+ """VFS rooted at the .hg directory.
+
+ Used to access repository data not in the store.
+ """
+
+ svfs: Vfs
+ """VFS rooted at the store.
+
+ Used to access repository data in the store. Typically .hg/store.
+ But can point elsewhere if the store is shared.
+ """
+
+ root: bytes
+ """Path to the root of the working directory."""
+
+ path: bytes
+ """Path to the .hg directory."""
+
+ origroot: bytes
+ """The filesystem path that was used to construct the repo."""
+
+ auditor: Any
+ """A pathauditor for the working directory.
+
+ This checks if a path refers to a nested repository.
+
+ Operates on the filesystem.
+ """
+
+ nofsauditor: Any # TODO: add type hints
+ """A pathauditor for the working directory.
+
+ This is like ``auditor`` except it doesn't do filesystem checks.
+ """
+
+ baseui: Ui
+ """Original ui instance passed into constructor."""
+
+ ui: Ui
+ """Main ui instance for this instance."""
+
+ sharedpath: bytes
+ """Path to the .hg directory of the repo this repo was shared from."""
+
+ store: Any # TODO: add type hints
+ """A store instance."""
+
+ spath: bytes
+ """Path to the store."""
+
+ sjoin: Callable # TODO: add type hints
+ """Alias to self.store.join."""
+
+ cachevfs: Vfs
+ """A VFS used to access the cache directory.
+
+ Typically .hg/cache.
+ """
+
+ wcachevfs: Vfs
+ """A VFS used to access the cache directory dedicated to working copy
+
+ Typically .hg/wcache.
+ """
+
+ filteredrevcache: Any # TODO: add type hints
+ """Holds sets of revisions to be filtered."""
+
+ names: Any # TODO: add type hints
+ """A ``namespaces`` instance."""
+
+ filecopiesmode: Any # TODO: add type hints
+ """The way files copies should be dealt with in this repo."""
def close(self):
"""Close the handle on this repository."""
@@ -1771,22 +1764,23 @@
def filtered(self, name, visibilityexceptions=None):
"""Obtain a named view of this repository."""
- obsstore = interfaceutil.Attribute("""A store of obsolescence data.""")
-
- changelog = interfaceutil.Attribute("""A handle on the changelog revlog.""")
-
- manifestlog = interfaceutil.Attribute(
- """An instance conforming to the ``imanifestlog`` interface.
-
- Provides access to manifests for the repository.
- """
- )
-
- dirstate = interfaceutil.Attribute("""Working directory state.""")
-
- narrowpats = interfaceutil.Attribute(
- """Matcher patterns for this repository's narrowspec."""
- )
+ obsstore: Any # TODO: add type hints
+ """A store of obsolescence data."""
+
+ changelog: Any # TODO: add type hints
+ """A handle on the changelog revlog."""
+
+ manifestlog: imanifestlog
+ """An instance conforming to the ``imanifestlog`` interface.
+
+ Provides access to manifests for the repository.
+ """
+
+ dirstate: intdirstate.idirstate
+ """Working directory state."""
+
+ narrowpats: Any # TODO: add type hints
+ """Matcher patterns for this repository's narrowspec."""
def narrowmatch(self, match=None, includeexact=False):
"""Obtain a matcher for the narrowspec."""
@@ -2025,7 +2019,8 @@
def checkpush(self, pushop):
pass
- prepushoutgoinghooks = interfaceutil.Attribute("""util.hooks instance.""")
+ prepushoutgoinghooks: util.hooks
+ """util.hooks instance."""
def pushkey(self, namespace, key, old, new):
pass