Skip to content
Snippets Groups Projects
Commit a0aad86b authored by Gregory Szorc's avatar Gregory Szorc
Browse files

repository: implement generic capability methods on peer class

These methods are part of the peer interface, are generic, and can
be implemented in terms of other members of the peer interface. So we
implement them on the peer base class as a convenience.

The implementation is essentially copied from peer.py. The code
in peer.py will eventually be deleted.

Differential Revision: https://phab.mercurial-scm.org/D334
parent 558f5b2e
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,11 @@
import abc
from .i18n import _
from . import (
error,
)
class _basepeer(object):
"""Represents a "connection" to a repository.
......@@ -228,5 +233,36 @@
calls. However, they must all support this API.
"""
def capable(self, name):
"""Determine support for a named capability.
Returns ``False`` if capability not supported.
Returns ``True`` if boolean capability is supported. Returns a string
if capability support is non-boolean.
"""
caps = self.capabilities()
if name in caps:
return True
name = '%s=' % name
for cap in caps:
if cap.startswith(name):
return cap[len(name):]
return False
def requirecap(self, name, purpose):
"""Require a capability to be present.
Raises a ``CapabilityError`` if the capability isn't present.
"""
if self.capable(name):
return
raise error.CapabilityError(
_('cannot %s; remote repository does not support the %r '
'capability') % (purpose, name))
class legacypeer(peer, _baselegacywirecommands):
"""peer but with support for legacy wire protocol commands."""
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment