Mercurial > public > mercurial-scm > hg-stable
changeset 52497:4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
This is the same transformation as 3a90a6fd710d did for dirstate, but the
CamelCase naming was already cleaned up here.
We shouldn't have to explicitly subclass, but I'm doing so to test the interplay
of regular attributes and the `attrs` class. Also, PyCharm has a nifty feature
that puts a jump point in the gutter to navigate back and forth between the base
class and subclasses (and override functions and base class functions) when
there's an explicit subclassing. Additionally, PyCharm will immediately flag
signature mismatches without a 40m pytype run.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 22 Oct 2024 17:18:26 -0400 |
parents | f968926a4207 |
children | 2aada52e80d6 |
files | hgext/sqlitestore.py mercurial/filelog.py mercurial/revlog.py tests/simplestorerepo.py |
diffstat | 4 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/sqlitestore.py Tue Oct 22 17:07:23 2024 -0400 +++ b/hgext/sqlitestore.py Tue Oct 22 17:18:26 2024 -0400 @@ -51,6 +51,10 @@ import typing import zlib +from typing import ( + Optional, +) + from mercurial.i18n import _ from mercurial.node import ( nullrev, @@ -300,12 +304,11 @@ linknode = attr.ib(default=None) -@interfaceutil.implementer(repository.iverifyproblem) @attr.s(frozen=True) -class sqliteproblem: - warning = attr.ib(default=None) - error = attr.ib(default=None) - node = attr.ib(default=None) +class sqliteproblem(repository.iverifyproblem): + warning = attr.ib(default=None, type=Optional[bytes]) + error = attr.ib(default=None, type=Optional[bytes]) + node = attr.ib(default=None, type=Optional[bytes]) @interfaceutil.implementer(repository.ifilestorage)
--- a/mercurial/filelog.py Tue Oct 22 17:07:23 2024 -0400 +++ b/mercurial/filelog.py Tue Oct 22 17:18:26 2024 -0400 @@ -241,7 +241,7 @@ """ return not storageutil.filedataequivalent(self, node, text) - def verifyintegrity(self, state) -> Iterable[revlog.revlogproblem]: + def verifyintegrity(self, state) -> Iterable[repository.iverifyproblem]: return self._revlog.verifyintegrity(state) def storageinfo(
--- a/mercurial/revlog.py Tue Oct 22 17:07:23 2024 -0400 +++ b/mercurial/revlog.py Tue Oct 22 17:18:26 2024 -0400 @@ -204,7 +204,7 @@ @attr.s(frozen=True) -class revlogproblem: # (repository.iverifyproblem) +class revlogproblem(repository.iverifyproblem): warning = attr.ib(default=None, type=Optional[bytes]) error = attr.ib(default=None, type=Optional[bytes]) node = attr.ib(default=None, type=Optional[bytes]) @@ -4021,7 +4021,7 @@ else: rewrite.v2_censor(self, tr, censor_nodes, tombstone) - def verifyintegrity(self, state) -> Iterable[revlogproblem]: + def verifyintegrity(self, state) -> Iterable[repository.iverifyproblem]: """Verifies the integrity of the revlog. Yields ``revlogproblem`` instances describing problems that are
--- a/tests/simplestorerepo.py Tue Oct 22 17:07:23 2024 -0400 +++ b/tests/simplestorerepo.py Tue Oct 22 17:18:26 2024 -0400 @@ -13,6 +13,10 @@ import stat +from typing import ( + Optional, +) + from mercurial.i18n import _ from mercurial.node import ( bin, @@ -82,12 +86,11 @@ linknode = attr.ib(default=None) -@interfaceutil.implementer(repository.iverifyproblem) @attr.s(frozen=True) -class simplefilestoreproblem: - warning = attr.ib(default=None) - error = attr.ib(default=None) - node = attr.ib(default=None) +class simplefilestoreproblem(repository.iverifyproblem): + warning = attr.ib(default=None, type=Optional[bytes]) + error = attr.ib(default=None, type=Optional[bytes]) + node = attr.ib(default=None, type=Optional[bytes]) @interfaceutil.implementer(repository.ifilestorage)