diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -2170,7 +2170,8 @@ 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 @@ 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 @@ 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 @@ # 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'))