diff -r 0c231df1ffdc -r b8d0761a85c7 mercurial/sshpeer.py --- a/mercurial/sshpeer.py Wed Feb 21 14:21:05 2018 -0800 +++ b/mercurial/sshpeer.py Wed Feb 21 16:47:39 2018 -0800 @@ -466,25 +466,40 @@ return self._sendrequest(cmd, args, framed=True).read() def _callpush(self, cmd, fp, **args): + # The server responds with an empty frame if the client should + # continue submitting the payload. r = self._call(cmd, **args) if r: return '', r + + # The payload consists of frames with content followed by an empty + # frame. for d in iter(lambda: fp.read(4096), ''): self._writeframed(d) self._writeframed("", flush=True) + + # In case of success, there is an empty frame and a frame containing + # the integer result (as a string). + # In case of error, there is a non-empty frame containing the error. r = self._readframed() if r: return '', r return self._readframed(), '' def _calltwowaystream(self, cmd, fp, **args): + # The server responds with an empty frame if the client should + # continue submitting the payload. r = self._call(cmd, **args) if r: # XXX needs to be made better raise error.Abort(_('unexpected remote reply: %s') % r) + + # The payload consists of frames with content followed by an empty + # frame. for d in iter(lambda: fp.read(4096), ''): self._writeframed(d) self._writeframed("", flush=True) + return self._pipei def _getamount(self):