# HG changeset patch # User Gregory Szorc # Date 1535057199 25200 # Node ID c734a5c82f3812a46983acee706179fe84fcd113 # Parent 3c6f7eebc010a0f147b36a2c77757c05909eeb14 wireprotov2peer: split responsedata handling into separate function So we don't have so much logic inside an if/elif block. Differential Revision: https://phab.mercurial-scm.org/D4439 diff -r 3c6f7eebc010 -r c734a5c82f38 mercurial/wireprotov2peer.py --- a/mercurial/wireprotov2peer.py Wed Aug 22 10:25:47 2018 -0700 +++ b/mercurial/wireprotov2peer.py Thu Aug 23 13:46:39 2018 -0700 @@ -136,38 +136,40 @@ response = self._responses[frame.requestid] if action == 'responsedata': - # This buffers all data until end of stream is received. This - # is bad for performance. - # TODO make response data streamable - response.b.write(meta['data']) - - if meta['eos']: - # If the command has a decoder, resolve the future to the - # decoded value. Otherwise resolve to the rich response object. - decoder = COMMAND_DECODERS.get(response.command) - - # TODO consider always resolving the overall status map. - if decoder: - objs = response.cborobjects() - - overall = next(objs) - - if overall['status'] == 'ok': - self._futures[frame.requestid].set_result(decoder(objs)) - else: - e = error.RepoError( - formatrichmessage(overall['error']['message'])) - self._futures[frame.requestid].set_exception(e) - else: - self._futures[frame.requestid].set_result(response) - - del self._requests[frame.requestid] - del self._futures[frame.requestid] - + self._processresponsedata(frame, meta, response) else: raise error.ProgrammingError( 'unhandled action from clientreactor: %s' % action) + def _processresponsedata(self, frame, meta, response): + # This buffers all data until end of stream is received. This + # is bad for performance. + # TODO make response data streamable + response.b.write(meta['data']) + + if meta['eos']: + # If the command has a decoder, resolve the future to the + # decoded value. Otherwise resolve to the rich response object. + decoder = COMMAND_DECODERS.get(response.command) + + # TODO consider always resolving the overall status map. + if decoder: + objs = response.cborobjects() + + overall = next(objs) + + if overall['status'] == 'ok': + self._futures[frame.requestid].set_result(decoder(objs)) + else: + e = error.RepoError( + formatrichmessage(overall['error']['message'])) + self._futures[frame.requestid].set_exception(e) + else: + self._futures[frame.requestid].set_result(response) + + del self._requests[frame.requestid] + del self._futures[frame.requestid] + def decodebranchmap(objs): # Response should be a single CBOR map of branch name to array of nodes. bm = next(objs)