diff -r 10cf8b116dd8 -r 86b22a4cfab1 mercurial/httppeer.py --- a/mercurial/httppeer.py Wed Sep 26 17:46:48 2018 -0700 +++ b/mercurial/httppeer.py Wed Sep 26 15:02:19 2018 -0700 @@ -508,7 +508,8 @@ def _abort(self, exception): raise exception -def sendv2request(ui, opener, requestbuilder, apiurl, permission, requests): +def sendv2request(ui, opener, requestbuilder, apiurl, permission, requests, + redirect): reactor = wireprotoframing.clientreactor(hasmultiplesend=False, buffersends=True) @@ -525,7 +526,8 @@ for command, args, f in requests: ui.debug('sending command %s: %s\n' % ( command, stringutil.pprint(args, indent=2))) - assert not list(handler.callcommand(command, args, f)) + assert not list(handler.callcommand(command, args, f, + redirect=redirect)) # TODO stream this. body = b''.join(map(bytes, handler.flushcommands())) @@ -567,12 +569,14 @@ @interfaceutil.implementer(repository.ipeercommandexecutor) class httpv2executor(object): - def __init__(self, ui, opener, requestbuilder, apiurl, descriptor): + def __init__(self, ui, opener, requestbuilder, apiurl, descriptor, + redirect): self._ui = ui self._opener = opener self._requestbuilder = requestbuilder self._apiurl = apiurl self._descriptor = descriptor + self._redirect = redirect self._sent = False self._closed = False self._neededpermissions = set() @@ -672,7 +676,7 @@ handler, resp = sendv2request( self._ui, self._opener, self._requestbuilder, self._apiurl, - permission, calls) + permission, calls, self._redirect) # TODO we probably want to validate the HTTP code, media type, etc. @@ -734,6 +738,8 @@ self._requestbuilder = requestbuilder self._descriptor = apidescriptor + self._redirect = wireprotov2peer.supportedredirects(ui, apidescriptor) + # Start of ipeerconnection. def url(self): @@ -791,7 +797,7 @@ def commandexecutor(self): return httpv2executor(self.ui, self._opener, self._requestbuilder, - self._apiurl, self._descriptor) + self._apiurl, self._descriptor, self._redirect) # Registry of API service names to metadata about peers that handle it. #