~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/log.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-07-02 04:49:28 UTC
  • mfrom: (4491.2.9 340347-log-decorator)
  • Revision ID: pqm@pqm.ubuntu.com-20090702044928-90mv3s7kk139lbsf
(mbp) fix log+ transport decorator

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
    and may be slow.
45
45
 
46
46
    Not all operations are logged yet.
 
47
 
 
48
    See also TransportTraceDecorator, that records a machine-readable log in 
 
49
    memory for eg testing.
47
50
    """
48
51
 
49
52
    def __init__(self, *args, **kw):
104
107
    def _show_result(self, before, methodname, result):
105
108
        result_len = None
106
109
        if isinstance(result, types.GeneratorType):
107
 
            # eagerly pull in all the contents, so that we can measure how
108
 
            # long it takes to get them.  this does make the behaviour a bit
109
 
            # different, but we hope not noticably so
 
110
            # We now consume everything from the generator so that we can show
 
111
            # the results and the time it took to get them.  However, to keep
 
112
            # compatibility with callers that may specifically expect a result
 
113
            # (see <https://launchpad.net/bugs/340347>) we also return a new
 
114
            # generator, reset to the starting position.
110
115
            result = list(result)
 
116
            return_result = iter(result)
 
117
        else:
 
118
            return_result = result
111
119
        if isinstance(result, (cStringIO.OutputType, StringIO.StringIO)):
112
120
            val = repr(result.getvalue())
113
121
            result_len = len(val)
122
130
        else:
123
131
            shown_result = self._shorten(self._strip_tuple_parens(result))
124
132
        mutter("  --> %s" % shown_result)
125
 
        # XXX: the time may be wrong when e.g. a generator object is returned from
126
 
        # an http readv, if the object is returned before the bulk data
127
 
        # is read.
128
 
        elapsed = time.time() - before
129
 
        if result_len and elapsed > 0:
130
 
            # this is the rate of higher-level data, not the raw network speed
131
 
            mutter("      %9.03fs %8dKB/s" % (elapsed, result_len/elapsed/1024))
132
 
        else:
133
 
            mutter("      %9.03fs" % (elapsed))
134
 
        return result
 
133
        # The log decorator no longer shows the elapsed time or transfer rate
 
134
        # because they're available in the log prefixes and the transport
 
135
        # activity display respectively.
 
136
        if False:
 
137
            elapsed = time.time() - before
 
138
            if result_len and elapsed > 0:
 
139
                # this is the rate of higher-level data, not the raw network speed
 
140
                mutter("      %9.03fs %8dKB/s" % (elapsed, result_len/elapsed/1024))
 
141
            else:
 
142
                mutter("      %9.03fs" % (elapsed))
 
143
        return return_result
135
144
 
136
145
    def _shorten(self, x):
137
146
        if len(x) > 70: