diff -r 9bfcbe4f4745 -r 5fadc63ac99f mercurial/wireprotoframing.py --- a/mercurial/wireprotoframing.py Mon Mar 26 11:00:16 2018 -0700 +++ b/mercurial/wireprotoframing.py Mon Mar 26 13:59:56 2018 -0700 @@ -533,9 +533,11 @@ """ self._deferoutput = deferoutput self._state = 'idle' + self._nextoutgoingstreamid = 2 self._bufferedframegens = [] # stream id -> stream instance for all active streams from the client. self._incomingstreams = {} + self._outgoingstreams = {} # request id -> dict of commands that are actively being received. self._receivingcommands = {} # Request IDs that have been received and are actively being processed. @@ -638,6 +640,16 @@ application=True), } + def makeoutputstream(self): + """Create a stream to be used for sending data to the client.""" + streamid = self._nextoutgoingstreamid + self._nextoutgoingstreamid += 2 + + s = stream(streamid) + self._outgoingstreams[streamid] = s + + return s + def _makeerrorresult(self, msg): return 'error', { 'message': msg,