/breezy/unstable

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/unstable

« back to all changes in this revision

Viewing changes to breezy/transport/log.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-24 01:39:33 UTC
  • mfrom: (3815.3776.6)
  • Revision ID: jelmer@jelmer.uk-20170524013933-ir4y4tqtrsiz2ka2
New upstream snapshot.

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 .bzr.log."""
 
17
"""Transport decorator that logs transport operations to .brz.log."""
18
18
 
19
19
from __future__ import absolute_import
20
20
 
21
21
# see also the transportstats plugin, which gives you some summary information
22
22
# in a machine-readable dump
23
23
 
24
 
import StringIO
25
 
import cStringIO
26
24
import time
27
25
import types
28
26
 
29
 
from bzrlib.trace import mutter
30
 
from bzrlib.transport import decorator
 
27
from ..trace import mutter
 
28
from ..transport import decorator
31
29
 
32
30
 
33
31
class TransportLogDecorator(decorator.TransportDecorator):
34
 
    """Decorator for Transports that logs interesting operations to .bzr.log.
 
32
    """Decorator for Transports that logs interesting operations to .brz.log.
35
33
 
36
34
    In general we want to log things that usually take a network round trip
37
35
    and may be slow.
48
46
            def _hook(relpath, *args, **kw):
49
47
                return self._log_and_call(hookname, relpath, *args, **kw)
50
48
            return _hook
 
49
        # GZ 2017-05-21: Not all methods take relpath as first argument, for
 
50
        # instance copy_to takes list of relpaths. Also, unclear on url vs
 
51
        # filesystem path split. Needs tidying up.
51
52
        for methodname in (
52
53
            'append_bytes',
53
54
            'append_file',
82
83
        else:
83
84
            kwargs_str = ''
84
85
        mutter("%s %s %s %s"
85
 
               % (methodname, self._decorated.abspath(relpath),
 
86
               % (methodname, relpath,
86
87
                  self._shorten(self._strip_tuple_parens(args)),
87
88
                  kwargs_str))
88
89
        return self._call_and_log_result(methodname, (relpath,) + args, kwargs)
91
92
        before = time.time()
92
93
        try:
93
94
            result = getattr(self._decorated, methodname)(*args, **kwargs)
94
 
        except Exception, e:
 
95
        except Exception as e:
95
96
            mutter("  --> %s" % e)
96
97
            mutter("      %.03fs" % (time.time() - before))
97
98
            raise
109
110
            return_result = iter(result)
110
111
        else:
111
112
            return_result = result
112
 
        if isinstance(result, (cStringIO.OutputType, StringIO.StringIO)):
113
 
            val = repr(result.getvalue())
 
113
        # Is this an io object with a getvalue() method?
 
114
        getvalue = getattr(result, 'getvalue', None)
 
115
        if getvalue is not None:
 
116
            val = repr(getvalue())
114
117
            result_len = len(val)
115
118
            shown_result = "%s(%s) (%d bytes)" % (result.__class__.__name__,
116
119
                self._shorten(val), result_len)
151
154
 
152
155
def get_test_permutations():
153
156
    """Return the permutations to be used in testing."""
154
 
    from bzrlib.tests import test_server
 
157
    from ..tests import test_server
155
158
    return [(TransportLogDecorator, test_server.LogDecoratorServer)]