Mercurial > hg
changeset 39438:c734a5c82f38
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
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 23 Aug 2018 13:46:39 -0700 |
parents | 3c6f7eebc010 |
children | dc61a67c1fc0 |
files | mercurial/wireprotov2peer.py |
diffstat | 1 files changed, 30 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- 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)