~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/protocol.py

(jelmer) Fix bug #1010339,
 use encoding_type='exact' for bzr testament (John A Meinel)

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
client and server.
19
19
"""
20
20
 
21
 
from __future__ import absolute_import
22
 
 
23
21
import collections
24
22
from cStringIO import StringIO
25
23
import struct
26
24
import sys
27
25
import thread
 
26
import threading
28
27
import time
29
28
 
30
29
import bzrlib
1082
1081
        self._real_write_func = write_func
1083
1082
 
1084
1083
    def _write_func(self, bytes):
 
1084
        # TODO: It is probably more appropriate to use sum(map(len, _buf))
 
1085
        #       for total number of bytes to write, rather than buffer based on
 
1086
        #       the number of write() calls
1085
1087
        # TODO: Another possibility would be to turn this into an async model.
1086
1088
        #       Where we let another thread know that we have some bytes if
1087
1089
        #       they want it, but we don't actually block for it
1290
1292
        _ProtocolThreeEncoder.__init__(self, medium_request.accept_bytes)
1291
1293
        self._medium_request = medium_request
1292
1294
        self._headers = {}
1293
 
        self.body_stream_started = None
1294
1295
 
1295
1296
    def set_headers(self, headers):
1296
1297
        self._headers = headers.copy()
1356
1357
            if path is not None:
1357
1358
                mutter('                  (to %s)', path)
1358
1359
            self._request_start_time = osutils.timer_func()
1359
 
        self.body_stream_started = False
1360
1360
        self._write_protocol_version()
1361
1361
        self._write_headers(self._headers)
1362
1362
        self._write_structure(args)
1364
1364
        #       have finished sending the stream.  We would notice at the end
1365
1365
        #       anyway, but if the medium can deliver it early then it's good
1366
1366
        #       to short-circuit the whole request...
1367
 
        # Provoke any ConnectionReset failures before we start the body stream.
1368
 
        self.flush()
1369
 
        self.body_stream_started = True
1370
1367
        for exc_info, part in _iter_with_errors(stream):
1371
1368
            if exc_info is not None:
1372
1369
                # Iterating the stream failed.  Cleanly abort the request.