diff mercurial/interfaces/repository.py @ 52446:c1674551c109

interfaces: add the missing `self` arg to the repository Protocol classes This clears all of the errors that PyCharm has been flagging in this file, since the zope interfaces were declared here. This is the same transformation as 13aa17512583 did for dirstate.
author Matt Harbison <matt_harbison@yahoo.com>
date Tue, 22 Oct 2024 16:29:44 -0400
parents 26dd402c3497
children fb3144d35361
line wrap: on
line diff
--- a/mercurial/interfaces/repository.py	Tue Oct 22 16:04:27 2024 -0400
+++ b/mercurial/interfaces/repository.py	Tue Oct 22 16:29:44 2024 -0400
@@ -115,7 +115,7 @@
     ui = interfaceutil.Attribute("""ui.ui instance""")
     path = interfaceutil.Attribute("""a urlutil.path instance or None""")
 
-    def url():
+    def url(self):
         """Returns a URL string representing this peer.
 
         Currently, implementations expose the raw URL used to construct the
@@ -127,17 +127,17 @@
         value.
         """
 
-    def local():
+    def local(self):
         """Returns a local repository instance.
 
         If the peer represents a local repository, returns an object that
         can be used to interface with it. Otherwise returns ``None``.
         """
 
-    def canpush():
+    def canpush(self):
         """Returns a boolean indicating if this peer can be pushed to."""
 
-    def close():
+    def close(self):
         """Close the connection to this peer.
 
         This is called when the peer will no longer be used. Resources
@@ -148,7 +148,7 @@
 class ipeercapabilities(Protocol):
     """Peer sub-interface related to capabilities."""
 
-    def capable(name):
+    def capable(self, name):
         """Determine support for a named capability.
 
         Returns ``False`` if capability not supported.
@@ -159,7 +159,7 @@
         Capability strings may or may not map to wire protocol capabilities.
         """
 
-    def requirecap(name, purpose):
+    def requirecap(self, name, purpose):
         """Require a capability to be present.
 
         Raises a ``CapabilityError`` if the capability isn't present.
@@ -173,35 +173,35 @@
     methods commonly call wire protocol commands of the same name.
     """
 
-    def branchmap():
+    def branchmap(self):
         """Obtain heads in named branches.
 
         Returns a dict mapping branch name to an iterable of nodes that are
         heads on that branch.
         """
 
-    def capabilities():
+    def capabilities(self):
         """Obtain capabilities of the peer.
 
         Returns a set of string capabilities.
         """
 
-    def get_cached_bundle_inline(path):
+    def get_cached_bundle_inline(self, path):
         """Retrieve a clonebundle across the wire.
 
         Returns a chunkbuffer
         """
 
-    def clonebundles():
+    def clonebundles(self):
         """Obtains the clone bundles manifest for the repo.
 
         Returns the manifest as unparsed bytes.
         """
 
-    def debugwireargs(one, two, three=None, four=None, five=None):
+    def debugwireargs(self, one, two, three=None, four=None, five=None):
         """Used to facilitate debugging of arguments passed over the wire."""
 
-    def getbundle(source, **kwargs):
+    def getbundle(self, source, **kwargs):
         """Obtain remote repository data as a bundle.
 
         This command is how the bulk of repository data is transferred from
@@ -210,13 +210,13 @@
         Returns a generator of bundle data.
         """
 
-    def heads():
+    def heads(self):
         """Determine all known head revisions in the peer.
 
         Returns an iterable of binary nodes.
         """
 
-    def known(nodes):
+    def known(self, nodes):
         """Determine whether multiple nodes are known.
 
         Accepts an iterable of nodes whose presence to check for.
@@ -225,19 +225,19 @@
         at that index is known to the peer.
         """
 
-    def listkeys(namespace):
+    def listkeys(self, namespace):
         """Obtain all keys in a pushkey namespace.
 
         Returns an iterable of key names.
         """
 
-    def lookup(key):
+    def lookup(self, key):
         """Resolve a value to a known revision.
 
         Returns a binary node of the resolved revision on success.
         """
 
-    def pushkey(namespace, key, old, new):
+    def pushkey(self, namespace, key, old, new):
         """Set a value using the ``pushkey`` protocol.
 
         Arguments correspond to the pushkey namespace and key to operate on and
@@ -247,13 +247,13 @@
         namespace.
         """
 
-    def stream_out():
+    def stream_out(self):
         """Obtain streaming clone data.
 
         Successful result should be a generator of data chunks.
         """
 
-    def unbundle(bundle, heads, url):
+    def unbundle(self, bundle, heads, url):
         """Transfer repository data to the peer.
 
         This is how the bulk of data during a push is transferred.
@@ -270,7 +270,7 @@
     legacy, the interfaces are split.
     """
 
-    def between(pairs):
+    def between(self, pairs):
         """Obtain nodes between pairs of nodes.
 
         ``pairs`` is an iterable of node pairs.
@@ -279,7 +279,7 @@
         requested pair.
         """
 
-    def branches(nodes):
+    def branches(self, nodes):
         """Obtain ancestor changesets of specific nodes back to a branch point.
 
         For each requested node, the peer finds the first ancestor node that is
@@ -288,10 +288,10 @@
         Returns an iterable of iterables with the resolved values for each node.
         """
 
-    def changegroup(nodes, source):
+    def changegroup(self, nodes, source):
         """Obtain a changegroup with data for descendants of specified nodes."""
 
-    def changegroupsubset(bases, heads, source):
+    def changegroupsubset(self, bases, heads, source):
         pass
 
 
@@ -304,7 +304,7 @@
     outstanding requests are waited on.
     """
 
-    def callcommand(name, args):
+    def callcommand(self, name, args):
         """Request that a named command be executed.
 
         Receives the command name and a dictionary of command arguments.
@@ -326,7 +326,7 @@
         until all command requests have been issued.
         """
 
-    def sendcommands():
+    def sendcommands(self):
         """Trigger submission of queued command requests.
 
         Not all transports submit commands as soon as they are requested to
@@ -336,7 +336,7 @@
         When called, no more new commands may be issued with this executor.
         """
 
-    def close():
+    def close(self):
         """Signal that this command request is finished.
 
         When called, no more new commands may be issued. All outstanding
@@ -360,7 +360,7 @@
         """True if the peer cannot receive large argument value for commands."""
     )
 
-    def commandexecutor():
+    def commandexecutor(self):
         """A context manager that resolves to an ipeercommandexecutor.
 
         The object this resolves to can be used to issue command requests
@@ -541,10 +541,10 @@
     in the index.
     """
 
-    def __len__():
+    def __len__(self):
         """The total number of revisions."""
 
-    def __getitem__(rev):
+    def __getitem__(self, rev):
         """Returns the object having a specific revision number.
 
         Returns an 8-tuple with the following fields:
@@ -575,7 +575,7 @@
         recent revision.
         """
 
-    def __contains__(rev):
+    def __contains__(self, rev):
         """Whether a revision number exists."""
 
     def insert(self, i, entry):
@@ -599,13 +599,13 @@
         """node for the null revision for use as delta base."""
     )
 
-    def __len__():
+    def __len__(self):
         """Obtain the number of revisions stored for this file."""
 
-    def __iter__():
+    def __iter__(self):
         """Iterate over revision numbers for this file."""
 
-    def hasnode(node):
+    def hasnode(self, node):
         """Returns a bool indicating if a node is known to this store.
 
         Implementations must only return True for full, binary node values:
@@ -615,31 +615,31 @@
         The null node is never present.
         """
 
-    def revs(start=0, stop=None):
+    def revs(self, start=0, stop=None):
         """Iterate over revision numbers for this file, with control."""
 
-    def parents(node):
+    def parents(self, node):
         """Returns a 2-tuple of parent nodes for a revision.
 
         Values will be ``nullid`` if the parent is empty.
         """
 
-    def parentrevs(rev):
+    def parentrevs(self, rev):
         """Like parents() but operates on revision numbers."""
 
-    def rev(node):
+    def rev(self, node):
         """Obtain the revision number given a node.
 
         Raises ``error.LookupError`` if the node is not known.
         """
 
-    def node(rev):
+    def node(self, rev):
         """Obtain the node value given a revision number.
 
         Raises ``IndexError`` if the node is not known.
         """
 
-    def lookup(node):
+    def lookup(self, node):
         """Attempt to resolve a value to a node.
 
         Value can be a binary node, hex node, revision number, or a string
@@ -648,25 +648,25 @@
         Raises ``error.LookupError`` if a node could not be resolved.
         """
 
-    def linkrev(rev):
+    def linkrev(self, rev):
         """Obtain the changeset revision number a revision is linked to."""
 
-    def iscensored(rev):
+    def iscensored(self, rev):
         """Return whether a revision's content has been censored."""
 
-    def commonancestorsheads(node1, node2):
+    def commonancestorsheads(self, node1, node2):
         """Obtain an iterable of nodes containing heads of common ancestors.
 
         See ``ancestor.commonancestorsheads()``.
         """
 
-    def descendants(revs):
+    def descendants(self, revs):
         """Obtain descendant revision numbers for a set of revision numbers.
 
         If ``nullrev`` is in the set, this is equivalent to ``revs()``.
         """
 
-    def heads(start=None, stop=None):
+    def heads(self, start=None, stop=None):
         """Obtain a list of nodes that are DAG heads, with control.
 
         The set of revisions examined can be limited by specifying
@@ -676,7 +676,7 @@
         encountered.
         """
 
-    def children(node):
+    def children(self, node):
         """Obtain nodes that are children of a node.
 
         Returns a list of nodes.
@@ -690,13 +690,13 @@
     data for a tracked file.
     """
 
-    def size(rev):
+    def size(self, rev):
         """Obtain the fulltext size of file data.
 
         Any metadata is excluded from size measurements.
         """
 
-    def revision(node):
+    def revision(self, node):
         """Obtain fulltext data for a node.
 
         By default, any storage transformations are applied before the data
@@ -707,24 +707,24 @@
         consumers should use ``read()`` to obtain the actual file data.
         """
 
-    def rawdata(node):
+    def rawdata(self, node):
         """Obtain raw data for a node."""
 
-    def read(node):
+    def read(self, node):
         """Resolve file fulltext data.
 
         This is similar to ``revision()`` except any metadata in the data
         headers is stripped.
         """
 
-    def renamed(node):
+    def renamed(self, node):
         """Obtain copy metadata for a node.
 
         Returns ``False`` if no copy metadata is stored or a 2-tuple of
         (path, node) from which this revision was copied.
         """
 
-    def cmp(node, fulltext):
+    def cmp(self, node, fulltext):
         """Compare fulltext to another revision.
 
         Returns True if the fulltext is different from what is stored.
@@ -735,6 +735,7 @@
         """
 
     def emitrevisions(
+        self,
         nodes,
         nodesorder=None,
         revisiondata=False,
@@ -793,7 +794,7 @@
 class ifilemutation(Protocol):
     """Storage interface for mutation events of a tracked file."""
 
-    def add(filedata, meta, transaction, linkrev, p1, p2):
+    def add(self, filedata, meta, transaction, linkrev, p1, p2):
         """Add a new revision to the store.
 
         Takes file data, dictionary of metadata, a transaction, linkrev,
@@ -805,6 +806,7 @@
         """
 
     def addrevision(
+        self,
         revisiondata,
         transaction,
         linkrev,
@@ -831,6 +833,7 @@
         """
 
     def addgroup(
+        self,
         deltas,
         linkmapper,
         transaction,
@@ -867,7 +870,7 @@
         even if it existed in the store previously.
         """
 
-    def censorrevision(tr, node, tombstone=b''):
+    def censorrevision(self, tr, node, tombstone=b''):
         """Remove the content of a single revision.
 
         The specified ``node`` will have its content purged from storage.
@@ -884,7 +887,7 @@
         that they no longer reference the deleted content.
         """
 
-    def getstrippoint(minlink):
+    def getstrippoint(self, minlink):
         """Find the minimum revision that must be stripped to strip a linkrev.
 
         Returns a 2-tuple containing the minimum revision number and a set
@@ -894,7 +897,7 @@
         a higher-level deletion API. ``repair.strip()`` relies on this.
         """
 
-    def strip(minlink, transaction):
+    def strip(self, minlink, transaction):
         """Remove storage of items starting at a linkrev.
 
         This uses ``getstrippoint()`` to determine the first node to remove.
@@ -908,7 +911,7 @@
 class ifilestorage(ifileindex, ifiledata, ifilemutation):
     """Complete storage interface for a single tracked file."""
 
-    def files():
+    def files(self):
         """Obtain paths that are backing storage for this file.
 
         TODO this is used heavily by verify code and there should probably
@@ -916,6 +919,7 @@
         """
 
     def storageinfo(
+        self,
         exclusivefiles=False,
         sharedfiles=False,
         revisionscount=False,
@@ -954,7 +958,7 @@
         callers are expected to handle this special value.
         """
 
-    def verifyintegrity(state):
+    def verifyintegrity(self, state):
         """Verifies the integrity of file storage.
 
         ``state`` is a dict holding state of the verifier process. It can be
@@ -979,23 +983,23 @@
     directories from a collection of paths.
     """
 
-    def addpath(path):
+    def addpath(self, path):
         """Add a path to the collection.
 
         All directories in the path will be added to the collection.
         """
 
-    def delpath(path):
+    def delpath(self, path):
         """Remove a path from the collection.
 
         If the removal was the last path in a particular directory, the
         directory is removed from the collection.
         """
 
-    def __iter__():
+    def __iter__(self):
         """Iterate over the directories in this collection of paths."""
 
-    def __contains__(path):
+    def __contains__(self, path):
         """Whether a specific directory is in this collection."""
 
 
@@ -1006,7 +1010,7 @@
     consists of a binary node and extra flags affecting that entry.
     """
 
-    def __getitem__(path):
+    def __getitem__(self, path):
         """Returns the binary node value for a path in the manifest.
 
         Raises ``KeyError`` if the path does not exist in the manifest.
@@ -1014,7 +1018,7 @@
         Equivalent to ``self.find(path)[0]``.
         """
 
-    def find(path):
+    def find(self, path):
         """Returns the entry for a path in the manifest.
 
         Returns a 2-tuple of (node, flags).
@@ -1022,46 +1026,46 @@
         Raises ``KeyError`` if the path does not exist in the manifest.
         """
 
-    def __len__():
+    def __len__(self):
         """Return the number of entries in the manifest."""
 
-    def __nonzero__():
+    def __nonzero__(self):
         """Returns True if the manifest has entries, False otherwise."""
 
     __bool__ = __nonzero__
 
-    def set(path, node, flags):
+    def set(self, path, node, flags):
         """Define the node value and flags for a path in the manifest.
 
         Equivalent to __setitem__ followed by setflag, but can be more efficient.
         """
 
-    def __setitem__(path, node):
+    def __setitem__(self, path, node):
         """Define the node value for a path in the manifest.
 
         If the path is already in the manifest, its flags will be copied to
         the new entry.
         """
 
-    def __contains__(path):
+    def __contains__(self, path):
         """Whether a path exists in the manifest."""
 
-    def __delitem__(path):
+    def __delitem__(self, path):
         """Remove a path from the manifest.
 
         Raises ``KeyError`` if the path is not in the manifest.
         """
 
-    def __iter__():
+    def __iter__(self):
         """Iterate over paths in the manifest."""
 
-    def iterkeys():
+    def iterkeys(self):
         """Iterate over paths in the manifest."""
 
-    def keys():
+    def keys(self):
         """Obtain a list of paths in the manifest."""
 
-    def filesnotin(other, match=None):
+    def filesnotin(self, other, match=None):
         """Obtain the set of paths in this manifest but not in another.
 
         ``match`` is an optional matcher function to be applied to both
@@ -1070,20 +1074,20 @@
         Returns a set of paths.
         """
 
-    def dirs():
+    def dirs(self):
         """Returns an object implementing the ``idirs`` interface."""
 
-    def hasdir(dir):
+    def hasdir(self, dir):
         """Returns a bool indicating if a directory is in this manifest."""
 
-    def walk(match):
+    def walk(self, match):
         """Generator of paths in manifest satisfying a matcher.
 
         If the matcher has explicit files listed and they don't exist in
         the manifest, ``match.bad()`` is called for each missing file.
         """
 
-    def diff(other, match=None, clean=False):
+    def diff(self, other, match=None, clean=False):
         """Find differences between this manifest and another.
 
         This manifest is compared to ``other``.
@@ -1100,41 +1104,41 @@
         are the same for the other manifest.
         """
 
-    def setflag(path, flag):
+    def setflag(self, path, flag):
         """Set the flag value for a given path.
 
         Raises ``KeyError`` if the path is not already in the manifest.
         """
 
-    def get(path, default=None):
+    def get(self, path, default=None):
         """Obtain the node value for a path or a default value if missing."""
 
-    def flags(path):
+    def flags(self, path):
         """Return the flags value for a path (default: empty bytestring)."""
 
-    def copy():
+    def copy(self):
         """Return a copy of this manifest."""
 
-    def items():
+    def items(self):
         """Returns an iterable of (path, node) for items in this manifest."""
 
-    def iteritems():
+    def iteritems(self):
         """Identical to items()."""
 
-    def iterentries():
+    def iterentries(self):
         """Returns an iterable of (path, node, flags) for this manifest.
 
         Similar to ``iteritems()`` except items are a 3-tuple and include
         flags.
         """
 
-    def text():
+    def text(self):
         """Obtain the raw data representation for this manifest.
 
         Result is used to create a manifest revision.
         """
 
-    def fastdelta(base, changes):
+    def fastdelta(self, base, changes):
         """Obtain a delta between this manifest and another given changes.
 
         ``base`` in the raw data representation for another manifest.
@@ -1156,7 +1160,7 @@
     as part of a larger interface.
     """
 
-    def copy():
+    def copy(self):
         """Obtain a copy of this manifest instance.
 
         Returns an object conforming to the ``imanifestrevisionwritable``
@@ -1164,7 +1168,7 @@
         ``imanifestlog`` collection as this instance.
         """
 
-    def read():
+    def read(self):
         """Obtain the parsed manifest data structure.
 
         The returned object conforms to the ``imanifestdict`` interface.
@@ -1174,14 +1178,14 @@
 class imanifestrevisionstored(imanifestrevisionbase):
     """Interface representing a manifest revision committed to storage."""
 
-    def node():
+    def node(self):
         """The binary node for this manifest."""
 
     parents = interfaceutil.Attribute(
         """List of binary nodes that are parents for this manifest revision."""
     )
 
-    def readdelta(shallow=False):
+    def readdelta(self, shallow=False):
         """Obtain the manifest data structure representing changes from parent.
 
         This manifest is compared to its 1st parent. A new manifest
@@ -1196,7 +1200,7 @@
         The returned object conforms to the ``imanifestdict`` interface.
         """
 
-    def read_any_fast_delta(valid_bases=None, *, shallow=False):
+    def read_any_fast_delta(self, valid_bases=None, *, shallow=False):
         """read some manifest information as fast if possible
 
         This might return a "delta", a manifest object containing only file
@@ -1219,7 +1223,7 @@
         The returned object conforms to the ``imanifestdict`` interface.
         """
 
-    def read_delta_parents(*, shallow=False, exact=True):
+    def read_delta_parents(self, *, shallow=False, exact=True):
         """return a diff from this revision against both parents.
 
         If `exact` is False, this might return a superset of the diff, containing
@@ -1233,7 +1237,7 @@
 
         The returned object conforms to the ``imanifestdict`` interface."""
 
-    def read_delta_new_entries(*, shallow=False):
+    def read_delta_new_entries(self, *, shallow=False):
         """Return a manifest containing just the entries that might be new to
         the repository.
 
@@ -1248,13 +1252,13 @@
 
         The returned object conforms to the ``imanifestdict`` interface."""
 
-    def readfast(shallow=False):
+    def readfast(self, shallow=False):
         """Calls either ``read()`` or ``readdelta()``.
 
         The faster of the two options is called.
         """
 
-    def find(key):
+    def find(self, key):
         """Calls self.read().find(key)``.
 
         Returns a 2-tuple of ``(node, flags)`` or raises ``KeyError``.
@@ -1264,7 +1268,9 @@
 class imanifestrevisionwritable(imanifestrevisionbase):
     """Interface representing a manifest revision that can be committed."""
 
-    def write(transaction, linkrev, p1node, p2node, added, removed, match=None):
+    def write(
+        self, transaction, linkrev, p1node, p2node, added, removed, match=None
+    ):
         """Add this revision to storage.
 
         Takes a transaction object, the changeset revision number it will
@@ -1312,25 +1318,25 @@
         """
     )
 
-    def __len__():
+    def __len__(self):
         """Obtain the number of revisions stored for this manifest."""
 
-    def __iter__():
+    def __iter__(self):
         """Iterate over revision numbers for this manifest."""
 
-    def rev(node):
+    def rev(self, node):
         """Obtain the revision number given a binary node.
 
         Raises ``error.LookupError`` if the node is not known.
         """
 
-    def node(rev):
+    def node(self, rev):
         """Obtain the node value given a revision number.
 
         Raises ``error.LookupError`` if the revision is not known.
         """
 
-    def lookup(value):
+    def lookup(self, value):
         """Attempt to resolve a value to a node.
 
         Value can be a binary node, hex node, revision number, or a bytes
@@ -1339,38 +1345,39 @@
         Raises ``error.LookupError`` if a ndoe could not be resolved.
         """
 
-    def parents(node):
+    def parents(self, node):
         """Returns a 2-tuple of parent nodes for a node.
 
         Values will be ``nullid`` if the parent is empty.
         """
 
-    def parentrevs(rev):
+    def parentrevs(self, rev):
         """Like parents() but operates on revision numbers."""
 
-    def linkrev(rev):
+    def linkrev(self, rev):
         """Obtain the changeset revision number a revision is linked to."""
 
-    def revision(node):
+    def revision(self, node):
         """Obtain fulltext data for a node."""
 
-    def rawdata(node):
+    def rawdata(self, node):
         """Obtain raw data for a node."""
 
-    def revdiff(rev1, rev2):
+    def revdiff(self, rev1, rev2):
         """Obtain a delta between two revision numbers.
 
         The returned data is the result of ``bdiff.bdiff()`` on the raw
         revision data.
         """
 
-    def cmp(node, fulltext):
+    def cmp(self, node, fulltext):
         """Compare fulltext to another revision.
 
         Returns True if the fulltext is different from what is stored.
         """
 
     def emitrevisions(
+        self,
         nodes,
         nodesorder=None,
         revisiondata=False,
@@ -1382,6 +1389,7 @@
         """
 
     def addgroup(
+        self,
         deltas,
         linkmapper,
         transaction,
@@ -1393,7 +1401,7 @@
         See the documentation in ``ifilemutation`` for more.
         """
 
-    def rawsize(rev):
+    def rawsize(self, rev):
         """Obtain the size of tracked data.
 
         Is equivalent to ``len(m.rawdata(node))``.
@@ -1401,49 +1409,58 @@
         TODO this method is only used by upgrade code and may be removed.
         """
 
-    def getstrippoint(minlink):
+    def getstrippoint(self, minlink):
         """Find minimum revision that must be stripped to strip a linkrev.
 
         See the documentation in ``ifilemutation`` for more.
         """
 
-    def strip(minlink, transaction):
+    def strip(self, minlink, transaction):
         """Remove storage of items starting at a linkrev.
 
         See the documentation in ``ifilemutation`` for more.
         """
 
-    def checksize():
+    def checksize(self):
         """Obtain the expected sizes of backing files.
 
         TODO this is used by verify and it should not be part of the interface.
         """
 
-    def files():
+    def files(self):
         """Obtain paths that are backing storage for this manifest.
 
         TODO this is used by verify and there should probably be a better API
         for this functionality.
         """
 
-    def deltaparent(rev):
+    def deltaparent(self, rev):
         """Obtain the revision that a revision is delta'd against.
 
         TODO delta encoding is an implementation detail of storage and should
         not be exposed to the storage interface.
         """
 
-    def clone(tr, dest, **kwargs):
+    def clone(self, tr, dest, **kwargs):
         """Clone this instance to another."""
 
-    def clearcaches(clear_persisted_data=False):
+    def clearcaches(self, clear_persisted_data=False):
         """Clear any caches associated with this instance."""
 
-    def dirlog(d):
+    def dirlog(self, d):
         """Obtain a manifest storage instance for a tree."""
 
     def add(
-        m, transaction, link, p1, p2, added, removed, readtree=None, match=None
+        self,
+        m,
+        transaction,
+        link,
+        p1,
+        p2,
+        added,
+        removed,
+        readtree=None,
+        match=None,
     ):
         """Add a revision to storage.
 
@@ -1467,6 +1484,7 @@
         """
 
     def storageinfo(
+        self,
         exclusivefiles=False,
         sharedfiles=False,
         revisionscount=False,
@@ -1479,7 +1497,7 @@
         This one behaves the same way, except for manifest data.
         """
 
-    def get_revlog():
+    def get_revlog(self):
         """return an actual revlog instance if any
 
         This exist because a lot of code leverage the fact the underlying
@@ -1505,7 +1523,7 @@
         """True, is the manifest is narrowed by a matcher"""
     )
 
-    def __getitem__(node):
+    def __getitem__(self, node):
         """Obtain a manifest instance for a given binary node.
 
         Equivalent to calling ``self.get('', node)``.
@@ -1514,7 +1532,7 @@
         interface.
         """
 
-    def get(tree, node, verify=True):
+    def get(self, tree, node, verify=True):
         """Retrieve the manifest instance for a given directory and binary node.
 
         ``node`` always refers to the node of the root manifest (which will be
@@ -1531,7 +1549,7 @@
         interface.
         """
 
-    def getstorage(tree):
+    def getstorage(self, tree):
         """Retrieve an interface to storage for a particular tree.
 
         If ``tree`` is the empty bytestring, storage for the root manifest will
@@ -1540,16 +1558,16 @@
         TODO formalize interface for returned object.
         """
 
-    def clearcaches(clear_persisted_data: bool = False) -> None:
+    def clearcaches(self, clear_persisted_data: bool = False) -> None:
         """Clear caches associated with this collection."""
 
-    def rev(node):
+    def rev(self, node):
         """Obtain the revision number for a binary node.
 
         Raises ``error.LookupError`` if the node is not known.
         """
 
-    def update_caches(transaction):
+    def update_caches(self, transaction):
         """update whatever cache are relevant for the used storage."""
 
 
@@ -1560,7 +1578,7 @@
     tracked file path.
     """
 
-    def file(f):
+    def file(self, f):
         """Obtain a filelog for a tracked path.
 
         The returned type conforms to the ``ifilestorage`` interface.
@@ -1700,16 +1718,16 @@
         """The way files copies should be dealt with in this repo."""
     )
 
-    def close():
+    def close(self):
         """Close the handle on this repository."""
 
-    def peer(path=None):
+    def peer(self, path=None):
         """Obtain an object conforming to the ``peer`` interface."""
 
-    def unfiltered():
+    def unfiltered(self):
         """Obtain an unfiltered/raw view of this repo."""
 
-    def filtered(name, visibilityexceptions=None):
+    def filtered(self, name, visibilityexceptions=None):
         """Obtain a named view of this repository."""
 
     obsstore = interfaceutil.Attribute("""A store of obsolescence data.""")
@@ -1729,73 +1747,73 @@
         """Matcher patterns for this repository's narrowspec."""
     )
 
-    def narrowmatch(match=None, includeexact=False):
+    def narrowmatch(self, match=None, includeexact=False):
         """Obtain a matcher for the narrowspec."""
 
-    def setnarrowpats(newincludes, newexcludes):
+    def setnarrowpats(self, newincludes, newexcludes):
         """Define the narrowspec for this repository."""
 
-    def __getitem__(changeid):
+    def __getitem__(self, changeid):
         """Try to resolve a changectx."""
 
-    def __contains__(changeid):
+    def __contains__(self, changeid):
         """Whether a changeset exists."""
 
-    def __nonzero__():
+    def __nonzero__(self):
         """Always returns True."""
         return True
 
     __bool__ = __nonzero__
 
-    def __len__():
+    def __len__(self):
         """Returns the number of changesets in the repo."""
 
-    def __iter__():
+    def __iter__(self):
         """Iterate over revisions in the changelog."""
 
-    def revs(expr, *args):
+    def revs(self, expr, *args):
         """Evaluate a revset.
 
         Emits revisions.
         """
 
-    def set(expr, *args):
+    def set(self, expr, *args):
         """Evaluate a revset.
 
         Emits changectx instances.
         """
 
-    def anyrevs(specs, user=False, localalias=None):
+    def anyrevs(self, specs, user=False, localalias=None):
         """Find revisions matching one of the given revsets."""
 
-    def url():
+    def url(self):
         """Returns a string representing the location of this repo."""
 
-    def hook(name, throw=False, **args):
+    def hook(self, name, throw=False, **args):
         """Call a hook."""
 
-    def tags():
+    def tags(self):
         """Return a mapping of tag to node."""
 
-    def tagtype(tagname):
+    def tagtype(self, tagname):
         """Return the type of a given tag."""
 
-    def tagslist():
+    def tagslist(self):
         """Return a list of tags ordered by revision."""
 
-    def nodetags(node):
+    def nodetags(self, node):
         """Return the tags associated with a node."""
 
-    def nodebookmarks(node):
+    def nodebookmarks(self, node):
         """Return the list of bookmarks pointing to the specified node."""
 
-    def branchmap():
+    def branchmap(self):
         """Return a mapping of branch to heads in that branch."""
 
-    def revbranchcache():
+    def revbranchcache(self):
         pass
 
-    def register_changeset(rev, changelogrevision):
+    def register_changeset(self, rev, changelogrevision):
         """Extension point for caches for new nodes.
 
         Multiple consumers are expected to need parts of the changelogrevision,
@@ -1803,113 +1821,114 @@
         cache would be fragile when other revisions are accessed, too."""
         pass
 
-    def branchtip(branchtip, ignoremissing=False):
+    def branchtip(self, branchtip, ignoremissing=False):
         """Return the tip node for a given branch."""
 
-    def lookup(key):
+    def lookup(self, key):
         """Resolve the node for a revision."""
 
-    def lookupbranch(key):
+    def lookupbranch(self, key):
         """Look up the branch name of the given revision or branch name."""
 
-    def known(nodes):
+    def known(self, nodes):
         """Determine whether a series of nodes is known.
 
         Returns a list of bools.
         """
 
-    def local():
+    def local(self):
         """Whether the repository is local."""
         return True
 
-    def publishing():
+    def publishing(self):
         """Whether the repository is a publishing repository."""
 
-    def cancopy():
+    def cancopy(self):
         pass
 
-    def shared():
+    def shared(self):
         """The type of shared repository or None."""
 
-    def wjoin(f, *insidef):
+    def wjoin(self, f, *insidef):
         """Calls self.vfs.reljoin(self.root, f, *insidef)"""
 
-    def setparents(p1, p2):
+    def setparents(self, p1, p2):
         """Set the parent nodes of the working directory."""
 
-    def filectx(path, changeid=None, fileid=None):
+    def filectx(self, path, changeid=None, fileid=None):
         """Obtain a filectx for the given file revision."""
 
-    def getcwd():
+    def getcwd(self):
         """Obtain the current working directory from the dirstate."""
 
-    def pathto(f, cwd=None):
+    def pathto(self, f, cwd=None):
         """Obtain the relative path to a file."""
 
-    def adddatafilter(name, fltr):
+    def adddatafilter(self, name, fltr):
         pass
 
-    def wread(filename):
+    def wread(self, filename):
         """Read a file from wvfs, using data filters."""
 
-    def wwrite(filename, data, flags, backgroundclose=False, **kwargs):
+    def wwrite(self, filename, data, flags, backgroundclose=False, **kwargs):
         """Write data to a file in the wvfs, using data filters."""
 
-    def wwritedata(filename, data):
+    def wwritedata(self, filename, data):
         """Resolve data for writing to the wvfs, using data filters."""
 
-    def currenttransaction():
+    def currenttransaction(self):
         """Obtain the current transaction instance or None."""
 
-    def transaction(desc, report=None):
+    def transaction(self, desc, report=None):
         """Open a new transaction to write to the repository."""
 
-    def undofiles():
+    def undofiles(self):
         """Returns a list of (vfs, path) for files to undo transactions."""
 
-    def recover():
+    def recover(self):
         """Roll back an interrupted transaction."""
 
-    def rollback(dryrun=False, force=False):
+    def rollback(self, dryrun=False, force=False):
         """Undo the last transaction.
 
         DANGEROUS.
         """
 
-    def updatecaches(tr=None, full=False, caches=None):
+    def updatecaches(self, tr=None, full=False, caches=None):
         """Warm repo caches."""
 
-    def invalidatecaches():
+    def invalidatecaches(self):
         """Invalidate cached data due to the repository mutating."""
 
-    def invalidatevolatilesets():
+    def invalidatevolatilesets(self):
         pass
 
-    def invalidatedirstate():
+    def invalidatedirstate(self):
         """Invalidate the dirstate."""
 
-    def invalidate(clearfilecache=False):
+    def invalidate(self, clearfilecache=False):
         pass
 
-    def invalidateall():
+    def invalidateall(self):
         pass
 
-    def lock(wait=True):
+    def lock(self, wait=True):
         """Lock the repository store and return a lock instance."""
 
-    def currentlock():
+    def currentlock(self):
         """Return the lock if it's held or None."""
 
-    def wlock(wait=True):
+    def wlock(self, wait=True):
         """Lock the non-store parts of the repository."""
 
-    def currentwlock():
+    def currentwlock(self):
         """Return the wlock if it's held or None."""
 
-    def checkcommitpatterns(wctx, match, status, fail):
+    def checkcommitpatterns(self, wctx, match, status, fail):
         pass
 
     def commit(
+        self,
         text=b'',
         user=None,
         date=None,
@@ -1920,16 +1939,17 @@
     ):
         """Add a new revision to the repository."""
 
-    def commitctx(ctx, error=False, origctx=None):
+    def commitctx(self, ctx, error=False, origctx=None):
         """Commit a commitctx instance to the repository."""
 
-    def destroying():
+    def destroying(self):
         """Inform the repository that nodes are about to be destroyed."""
 
-    def destroyed():
+    def destroyed(self):
         """Inform the repository that nodes have been destroyed."""
 
     def status(
+        self,
         node1=b'.',
         node2=None,
         match=None,
@@ -1940,50 +1960,50 @@
     ):
         """Convenience method to call repo[x].status()."""
 
-    def addpostdsstatus(ps):
+    def addpostdsstatus(self, ps):
         pass
 
-    def postdsstatus():
+    def postdsstatus(self):
         pass
 
-    def clearpostdsstatus():
+    def clearpostdsstatus(self):
         pass
 
-    def heads(start=None):
+    def heads(self, start=None):
         """Obtain list of nodes that are DAG heads."""
 
-    def branchheads(branch=None, start=None, closed=False):
+    def branchheads(self, branch=None, start=None, closed=False):
         pass
 
-    def branches(nodes):
+    def branches(self, nodes):
         pass
 
-    def between(pairs):
+    def between(self, pairs):
         pass
 
-    def checkpush(pushop):
+    def checkpush(self, pushop):
         pass
 
     prepushoutgoinghooks = interfaceutil.Attribute("""util.hooks instance.""")
 
-    def pushkey(namespace, key, old, new):
+    def pushkey(self, namespace, key, old, new):
         pass
 
-    def listkeys(namespace):
+    def listkeys(self, namespace):
         pass
 
-    def debugwireargs(one, two, three=None, four=None, five=None):
+    def debugwireargs(self, one, two, three=None, four=None, five=None):
         pass
 
-    def savecommitmessage(text):
+    def savecommitmessage(self, text):
         pass
 
     def register_sidedata_computer(
-        kind, category, keys, computer, flags, replace=False
+        self, kind, category, keys, computer, flags, replace=False
     ):
         pass
 
-    def register_wanted_sidedata(category):
+    def register_wanted_sidedata(self, category):
         pass
 
 
@@ -2076,20 +2096,20 @@
     instances to avoid this overhead.
     """
 
-    def __enter__():
+    def __enter__(self):
         """Marks the instance as active.
 
         Should return self.
         """
 
-    def __exit__(exctype, excvalue, exctb):
+    def __exit__(self, exctype, excvalue, exctb):
         """Called when cacher is no longer used.
 
         This can be used by implementations to perform cleanup actions (e.g.
         disconnecting network sockets, aborting a partially cached response.
         """
 
-    def adjustcachekeystate(state):
+    def adjustcachekeystate(self, state):
         """Influences cache key derivation by adjusting state to derive key.
 
         A dict defining the state used to derive the cache key is passed.
@@ -2101,7 +2121,7 @@
         existing keys.
         """
 
-    def setcachekey(key):
+    def setcachekey(self, key):
         """Record the derived cache key for this request.
 
         Instances may mutate the key for internal usage, as desired. e.g.
@@ -2113,7 +2133,7 @@
         instance.
         """
 
-    def lookup():
+    def lookup(self):
         """Attempt to resolve an entry in the cache.
 
         The instance is instructed to look for the cache key that it was
@@ -2131,7 +2151,7 @@
            would return if invoked or an equivalent representation thereof.
         """
 
-    def onobject(obj):
+    def onobject(self, obj):
         """Called when a new object is emitted from the command function.
 
         Receives as its argument the object that was emitted from the
@@ -2142,7 +2162,7 @@
         ``yield obj``.
         """
 
-    def onfinished():
+    def onfinished(self):
         """Called after all objects have been emitted from the command function.
 
         Implementations should return an iterator of objects to forward to