450 def _callcompressable(self, cmd, **args): |
450 def _callcompressable(self, cmd, **args): |
451 return self._callstream(cmd, **args) |
451 return self._callstream(cmd, **args) |
452 |
452 |
453 def _call(self, cmd, **args): |
453 def _call(self, cmd, **args): |
454 self._callstream(cmd, **args) |
454 self._callstream(cmd, **args) |
455 return self._recv() |
455 return self._readframed() |
456 |
456 |
457 def _callpush(self, cmd, fp, **args): |
457 def _callpush(self, cmd, fp, **args): |
458 r = self._call(cmd, **args) |
458 r = self._call(cmd, **args) |
459 if r: |
459 if r: |
460 return '', r |
460 return '', r |
461 for d in iter(lambda: fp.read(4096), ''): |
461 for d in iter(lambda: fp.read(4096), ''): |
462 self._send(d) |
462 self._writeframed(d) |
463 self._send("", flush=True) |
463 self._writeframed("", flush=True) |
464 r = self._recv() |
464 r = self._readframed() |
465 if r: |
465 if r: |
466 return '', r |
466 return '', r |
467 return self._recv(), '' |
467 return self._readframed(), '' |
468 |
468 |
469 def _calltwowaystream(self, cmd, fp, **args): |
469 def _calltwowaystream(self, cmd, fp, **args): |
470 r = self._call(cmd, **args) |
470 r = self._call(cmd, **args) |
471 if r: |
471 if r: |
472 # XXX needs to be made better |
472 # XXX needs to be made better |
473 raise error.Abort(_('unexpected remote reply: %s') % r) |
473 raise error.Abort(_('unexpected remote reply: %s') % r) |
474 for d in iter(lambda: fp.read(4096), ''): |
474 for d in iter(lambda: fp.read(4096), ''): |
475 self._send(d) |
475 self._writeframed(d) |
476 self._send("", flush=True) |
476 self._writeframed("", flush=True) |
477 return self._pipei |
477 return self._pipei |
478 |
478 |
479 def _getamount(self): |
479 def _getamount(self): |
480 l = self._pipei.readline() |
480 l = self._pipei.readline() |
481 if l == '\n': |
481 if l == '\n': |
486 try: |
486 try: |
487 return int(l) |
487 return int(l) |
488 except ValueError: |
488 except ValueError: |
489 self._abort(error.ResponseError(_("unexpected response:"), l)) |
489 self._abort(error.ResponseError(_("unexpected response:"), l)) |
490 |
490 |
491 def _recv(self): |
491 def _readframed(self): |
492 return self._pipei.read(self._getamount()) |
492 return self._pipei.read(self._getamount()) |
493 |
493 |
494 def _send(self, data, flush=False): |
494 def _writeframed(self, data, flush=False): |
495 self._pipeo.write("%d\n" % len(data)) |
495 self._pipeo.write("%d\n" % len(data)) |
496 if data: |
496 if data: |
497 self._pipeo.write(data) |
497 self._pipeo.write(data) |
498 if flush: |
498 if flush: |
499 self._pipeo.flush() |
499 self._pipeo.flush() |