~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

(gz) Create working tree at specified revision when doing a local push
 (Martin Packman)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2086
2086
# data at once.
2087
2087
MAX_SOCKET_CHUNK = 64 * 1024
2088
2088
 
2089
 
_end_of_stream_errors = [errno.ECONNRESET, errno.EPIPE, errno.EINVAL]
 
2089
_end_of_stream_errors = [errno.ECONNRESET]
2090
2090
for _eno in ['WSAECONNRESET', 'WSAECONNABORTED']:
2091
2091
    _eno = getattr(errno, _eno, None)
2092
2092
    if _eno is not None:
2158
2158
    while sent_total < byte_count:
2159
2159
        try:
2160
2160
            sent = sock.send(buffer(bytes, sent_total, MAX_SOCKET_CHUNK))
2161
 
        except (socket.error, IOError), e:
2162
 
            if e.args[0] in _end_of_stream_errors:
2163
 
                raise errors.ConnectionReset(
2164
 
                    "Error trying to write to socket", e)
 
2161
        except socket.error, e:
2165
2162
            if e.args[0] != errno.EINTR:
2166
2163
                raise
2167
2164
        else:
2168
 
            if sent == 0:
2169
 
                raise errors.ConnectionReset('Sending to %s returned 0 bytes'
2170
 
                                             % (sock,))
2171
2165
            sent_total += sent
2172
 
            if report_activity is not None:
2173
 
                report_activity(sent, 'write')
 
2166
            report_activity(sent, 'write')
2174
2167
 
2175
2168
 
2176
2169
def connect_socket(address):
2554
2547
else:
2555
2548
    is_local_pid_dead = _posix_is_local_pid_dead
2556
2549
 
2557
 
_maybe_ignored = ['EAGAIN', 'EINTR', 'ENOTSUP', 'EOPNOTSUPP', 'EACCES']
2558
 
_fdatasync_ignored = [getattr(errno, name) for name in _maybe_ignored
2559
 
                      if getattr(errno, name, None) is not None]
2560
 
 
2561
2550
 
2562
2551
def fdatasync(fileno):
2563
2552
    """Flush file contents to disk if possible.
2567
2556
    """
2568
2557
    fn = getattr(os, 'fdatasync', getattr(os, 'fsync', None))
2569
2558
    if fn is not None:
2570
 
        try:
2571
 
            fn(fileno)
2572
 
        except IOError, e:
2573
 
            # See bug #1075108, on some platforms fdatasync exists, but can
2574
 
            # raise ENOTSUP. However, we are calling fdatasync to be helpful
2575
 
            # and reduce the chance of corruption-on-powerloss situations. It
2576
 
            # is not a mandatory call, so it is ok to suppress failures.
2577
 
            trace.mutter("ignoring error calling fdatasync: %s" % (e,))
2578
 
            if getattr(e, 'errno', None) not in _fdatasync_ignored:
2579
 
                raise
 
2559
        fn(fileno)
2580
2560
 
2581
2561
 
2582
2562
def ensure_empty_directory_exists(path, exception_class):