/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/transport/log.py

Merge test-run support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
"""Transport decorator that logs transport operations to brz.log."""
 
17
"""Transport decorator that logs transport operations to .brz.log."""
18
18
 
19
19
from __future__ import absolute_import
20
20
 
29
29
 
30
30
 
31
31
class TransportLogDecorator(decorator.TransportDecorator):
32
 
    """Decorator for Transports that logs interesting operations to brz.log.
 
32
    """Decorator for Transports that logs interesting operations to .brz.log.
33
33
 
34
34
    In general we want to log things that usually take a network round trip
35
35
    and may be slow.
36
36
 
37
37
    Not all operations are logged yet.
38
38
 
39
 
    See also TransportTraceDecorator, that records a machine-readable log in
 
39
    See also TransportTraceDecorator, that records a machine-readable log in 
40
40
    memory for eg testing.
41
41
    """
42
42
 
43
43
    def __init__(self, *args, **kw):
44
44
        super(TransportLogDecorator, self).__init__(*args, **kw)
45
 
 
46
45
        def _make_hook(hookname):
47
46
            def _hook(relpath, *args, **kw):
48
47
                return self._log_and_call(hookname, relpath, *args, **kw)
51
50
        # instance copy_to takes list of relpaths. Also, unclear on url vs
52
51
        # filesystem path split. Needs tidying up.
53
52
        for methodname in (
54
 
                'append_bytes',
55
 
                'append_file',
56
 
                'copy_to',
57
 
                'delete',
58
 
                'get',
59
 
                'has',
60
 
                'open_write_stream',
61
 
                'mkdir',
62
 
                'move',
63
 
                'put_bytes', 'put_bytes_non_atomic', 'put_file put_file_non_atomic',
64
 
                'list_dir', 'lock_read', 'lock_write',
65
 
                'readv', 'rename', 'rmdir',
66
 
                'stat',
67
 
                'ulock',
68
 
                ):
 
53
            'append_bytes',
 
54
            'append_file',
 
55
            'copy_to',
 
56
            'delete',
 
57
            'get',
 
58
            'has',
 
59
            'open_write_stream',
 
60
            'mkdir',
 
61
            'move',
 
62
            'put_bytes', 'put_bytes_non_atomic', 'put_file put_file_non_atomic',
 
63
            'list_dir', 'lock_read', 'lock_write',
 
64
            'readv', 'rename', 'rmdir',
 
65
            'stat',
 
66
            'ulock',
 
67
            ):
69
68
            setattr(self, methodname, _make_hook(methodname))
70
69
 
71
70
    @classmethod
75
74
    def iter_files_recursive(self):
76
75
        # needs special handling because it does not have a relpath parameter
77
76
        mutter("%s %s"
78
 
               % ('iter_files_recursive', self._decorated.base))
 
77
            % ('iter_files_recursive', self._decorated.base))
79
78
        return self._call_and_log_result('iter_files_recursive', (), {})
80
79
 
81
80
    def _log_and_call(self, methodname, relpath, *args, **kwargs):
117
116
            val = repr(getvalue())
118
117
            result_len = len(val)
119
118
            shown_result = "%s(%s) (%d bytes)" % (result.__class__.__name__,
120
 
                                                  self._shorten(val), result_len)
 
119
                self._shorten(val), result_len)
121
120
        elif methodname == 'readv':
122
121
            num_hunks = len(result)
123
122
            total_bytes = sum((len(d) for o, d in result))
136
135
                # this is the rate of higher-level data, not the raw network
137
136
                # speed using base-10 units (see HACKING.txt).
138
137
                mutter("      %9.03fs %8dkB/s"
139
 
                       % (elapsed, result_len / elapsed / 1000))
 
138
                       % (elapsed, result_len/elapsed/1000))
140
139
            else:
141
140
                mutter("      %9.03fs" % (elapsed))
142
141
        return return_result