diff --git a/mercurial/filelog.py b/mercurial/filelog.py --- a/mercurial/filelog.py +++ b/mercurial/filelog.py @@ -10,9 +10,13 @@ import re import struct +from .thirdparty.zope import ( + interface as zi, +) from . import ( error, mdiff, + repository, revlog, ) @@ -39,6 +43,7 @@ m, offs = parsemeta(text) return m and "censored" in m +@zi.implementer(repository.ifilestorage) class filelog(revlog.revlog): def __init__(self, opener, path): super(filelog, self).__init__(opener, diff --git a/tests/simplestorerepo.py b/tests/simplestorerepo.py --- a/tests/simplestorerepo.py +++ b/tests/simplestorerepo.py @@ -24,6 +24,9 @@ from mercurial.thirdparty import ( cbor, ) +from mercurial.thirdparty.zope import ( + interface as zi, +) from mercurial import ( ancestor, bundlerepo, @@ -33,6 +36,7 @@ localrepo, mdiff, pycompat, + repository, revlog, store, verify, @@ -57,6 +61,7 @@ if not isinstance(rev, int): raise ValueError('expected int') +@zi.implementer(repository.ifilestorage) class filestorage(object): """Implements storage for a tracked path. diff --git a/tests/test-check-interfaces.py b/tests/test-check-interfaces.py --- a/tests/test-check-interfaces.py +++ b/tests/test-check-interfaces.py @@ -12,6 +12,7 @@ ) from mercurial import ( bundlerepo, + filelog, httppeer, localrepo, repository, @@ -19,13 +20,14 @@ statichttprepo, ui as uimod, unionrepo, + vfs as vfsmod, wireprotoserver, wireprototypes, ) rootdir = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) -def checkzobject(o): +def checkzobject(o, allowextra=False): """Verify an object with a zope interface.""" ifaces = zi.providedBy(o) if not ifaces: @@ -37,6 +39,9 @@ for iface in ifaces: ziverify.verifyObject(iface, o) + if allowextra: + return + # Now verify that the object provides no extra public attributes that # aren't declared as part of interfaces. allowed = set() @@ -132,4 +137,10 @@ httpv2 = wireprotoserver.httpv2protocolhandler(None, None) checkzobject(httpv2) + ziverify.verifyClass(repository.ifilestorage, filelog.filelog) + + vfs = vfsmod.vfs('.') + fl = filelog.filelog(vfs, 'dummy.i') + checkzobject(fl, allowextra=True) + main()