D334: repository: implement generic capability methods on peer class
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sun Aug 13 14:18:46 EDT 2017
indygreg updated this revision to Diff 849.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D334?vs=759&id=849
REVISION DETAIL
https://phab.mercurial-scm.org/D334
AFFECTED FILES
mercurial/repository.py
CHANGE DETAILS
diff --git a/mercurial/repository.py b/mercurial/repository.py
--- a/mercurial/repository.py
+++ b/mercurial/repository.py
@@ -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."""
To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list