/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

  • Committer: Jelmer Vernooij
  • Date: 2020-03-22 01:35:14 UTC
  • mfrom: (7490.7.6 work)
  • mto: This revision was merged to the branch mainline in revision 7499.
  • Revision ID: jelmer@jelmer.uk-20200322013514-7vw1ntwho04rcuj3
merge lp:brz/3.1.

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