# HG changeset patch # User Gregory Szorc # Date 2018-04-13 19:13:42 # Node ID a168799687e5708c841284339e99e9eaa5b6a02c # Parent 8f3c6fb55369b92f184994edeb7e1434ad804dd5 wireproto: properly call clonebundles command We should not be using _call() to make wire protocol calls because it isn't part of the peer API. But clonebundles wasn't part of the supported commands in the peer API! So this commit defines that command in the commands interface, implements it, and teaches the one caller in core to call it using the command executor interface. Differential Revision: https://phab.mercurial-scm.org/D3317 diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -2170,7 +2170,8 @@ def _maybeapplyclonebundle(pullop): if not remote.capable('clonebundles'): return - res = remote._call('clonebundles') + with remote.commandexecutor() as e: + res = e.callcommand('clonebundles', {}).result() # If we call the wire protocol command, that's good enough to record the # attempt. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -235,6 +235,9 @@ class localpeer(repository.peer): def capabilities(self): return self._caps + def clonebundles(self): + return self._repo.tryread('clonebundles.manifest') + def debugwireargs(self, one, two, three=None, four=None, five=None): """Used to test argument passing over the wire""" return "%s %s %s %s %s" % (one, two, pycompat.bytestr(three), diff --git a/mercurial/repository.py b/mercurial/repository.py --- a/mercurial/repository.py +++ b/mercurial/repository.py @@ -101,6 +101,12 @@ class ipeercommands(zi.Interface): Returns a set of string capabilities. """ + def clonebundles(): + """Obtains the clone bundles manifest for the repo. + + Returns the manifest as unparsed bytes. + """ + def debugwireargs(one, two, three=None, four=None, five=None): """Used to facilitate debugging of arguments passed over the wire.""" diff --git a/mercurial/wireprotov1peer.py b/mercurial/wireprotov1peer.py --- a/mercurial/wireprotov1peer.py +++ b/mercurial/wireprotov1peer.py @@ -322,6 +322,10 @@ class wirepeer(repository.peer): # Begin of ipeercommands interface. + def clonebundles(self): + self.requirecap('clonebundles', _('clone bundles')) + return self._call('clonebundles') + @batchable def lookup(self, key): self.requirecap('lookup', _('look up remote revision'))