Mercurial > public > mercurial-scm > hg-stable
diff mercurial/interfaces/repository.py @ 52547:1554bd50a1af
interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
I'm not sure why this was on the `ipeercommands` interface. It appears to be
because these interfaces started out as `_basewirecommands` to hold wire
commands, back in 558f5b2ee10e. The capabilities interface wasn't split out
until 98861a2298b5, when it pulled the capability related methods off of the
`ipeerbase` interface. Perhaps it was an oversight to not look at the commands
interface because, while this is a wire command, both `sshpeer` and `httppeer`
now perform a handshake while instantiating the peer object, and cache a fixed
list of capabilities in that object. Likewise, `localpeer` is given a fixed set
of capabilities when instantiated. Back in 558f5b2ee10e, `httppeer` looks like
it issued a wire command when this method was called, but `sshpeer` obtained and
cached the capabilities when instantiated, and this method always returned a
fixed value.
There's a perfectly good interface with other capability related methods, and
having it here makes it easier to implement the base `peer` mixin class.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 16 Dec 2024 02:41:24 -0500 |
parents | 5a924cb07768 |
children | b52f2b365eff |
line wrap: on
line diff
--- a/mercurial/interfaces/repository.py Mon Dec 16 02:10:46 2024 -0500 +++ b/mercurial/interfaces/repository.py Mon Dec 16 02:41:24 2024 -0500 @@ -205,6 +205,13 @@ """ @abc.abstractmethod + def capabilities(self): + """Obtain capabilities of the peer. + + Returns a set of string capabilities. + """ + + @abc.abstractmethod def requirecap(self, name: bytes, purpose: bytes) -> None: """Require a capability to be present. @@ -228,13 +235,6 @@ """ @abc.abstractmethod - def capabilities(self): - """Obtain capabilities of the peer. - - Returns a set of string capabilities. - """ - - @abc.abstractmethod def get_cached_bundle_inline(self, path): """Retrieve a clonebundle across the wire. @@ -470,9 +470,7 @@ self.path = path def capable(self, name: bytes) -> bool | bytes: - # TODO: this class should maybe subclass ipeercommands too, otherwise it - # is assuming whatever uses this as a mixin also has this interface. - caps = self.capabilities() # pytype: disable=attribute-error + caps = self.capabilities() if name in caps: return True