Patchwork D3149: filelog: declare that filelog implements a storage interface

login
register
mail settings
Submitter phabricator
Date April 7, 2018, 1:22 a.m.
Message ID <e3c98a3243ec7a86e863cdbd4376645f@localhost.localdomain>
Download mbox | patch
Permalink /patch/30503/
State Not Applicable
Headers show

Comments

phabricator - April 7, 2018, 1:22 a.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGa3202fa83aff: filelog: declare that filelog implements a storage interface (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D3149?vs=7763&id=7847

REVISION DETAIL
  https://phab.mercurial-scm.org/D3149

AFFECTED FILES
  mercurial/filelog.py
  tests/simplestorerepo.py
  tests/test-check-interfaces.py

CHANGE DETAILS




To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel

Patch

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,20 +12,22 @@ 
 )
 from mercurial import (
     bundlerepo,
+    filelog,
     httppeer,
     localrepo,
     repository,
     sshpeer,
     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()
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/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,