/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 bzrlib/ui/text.py

Merge disable-medusa-for-python-2.6 into pyftpdlib

Show diffs side-by-side

added added

removed removed

Lines of Context:
86
86
        This may update a progress bar, spinner, or similar display.
87
87
        By default it does nothing.
88
88
        """
89
 
        self._progress_view.show_transport_activity(byte_count)
 
89
        self._progress_view._show_transport_activity(transport,
 
90
            direction, byte_count)
90
91
 
91
92
    def _progress_updated(self, task):
92
93
        """A task has been updated and wants to be displayed.
93
94
        """
94
 
        if task != self._task_stack[-1]:
 
95
        if not self._task_stack:
 
96
            warnings.warn("%r updated but no tasks are active" %
 
97
                (task,))
 
98
        elif task != self._task_stack[-1]:
95
99
            warnings.warn("%r is not the top progress task %r" %
96
100
                (task, self._task_stack[-1]))
97
101
        self._progress_view.show_progress(task)
127
131
        self._last_repaint = 0
128
132
        # time we last got information about transport activity
129
133
        self._transport_update_time = 0
130
 
        self._task_fraction = None
131
134
        self._last_task = None
132
135
        self._total_byte_count = 0
133
136
        self._bytes_since_update = 0
143
146
 
144
147
    def _render_bar(self):
145
148
        # return a string for the progress bar itself
146
 
        if (self._last_task is not None) and self._last_task.show_bar:
 
149
        if (self._last_task is None) or self._last_task.show_bar:
 
150
            # If there's no task object, we show space for the bar anyhow.
 
151
            # That's because most invocations of bzr will end showing progress
 
152
            # at some point, though perhaps only after doing some initial IO.
 
153
            # It looks better to draw the progress bar initially rather than
 
154
            # to have what looks like an incomplete progress bar.
147
155
            spin_str =  r'/-\|'[self._spin_pos % 4]
148
156
            self._spin_pos += 1
149
 
            f = self._task_fraction or 0
150
157
            cols = 20
151
 
            # number of markers highlighted in bar
152
 
            markers = int(round(float(cols) * f)) - 1
 
158
            if self._last_task is None:
 
159
                completion_fraction = 0
 
160
            else:
 
161
                completion_fraction = \
 
162
                    self._last_task._overall_completion_fraction() or 0
 
163
            markers = int(round(float(cols) * completion_fraction)) - 1
153
164
            bar_str = '[' + ('#' * markers + spin_str).ljust(cols) + '] '
154
165
            return bar_str
155
 
        elif (self._last_task is None) or self._last_task.show_spinner:
 
166
        elif self._last_task.show_spinner:
 
167
            # The last task wanted just a spinner, no bar
156
168
            spin_str =  r'/-\|'[self._spin_pos % 4]
157
169
            self._spin_pos += 1
158
170
            return spin_str + ' '
168
180
            s = ' %d' % (task.current_cnt)
169
181
        else:
170
182
            s = ''
171
 
        self._task_fraction = task._overall_completion_fraction()
172
183
        # compose all the parent messages
173
184
        t = task
174
185
        m = task.msg
178
189
                m = t.msg + ':' + m
179
190
        return m + s
180
191
 
181
 
    def _repaint(self):
 
192
    def _render_line(self):
182
193
        bar_string = self._render_bar()
183
194
        if self._last_task:
184
195
            task_msg = self._format_task(self._last_task)
185
196
        else:
186
197
            task_msg = ''
187
198
        trans = self._last_transport_msg
188
 
        if trans and task_msg:
 
199
        if trans:
189
200
            trans += ' | '
190
 
        s = (bar_string
191
 
             + trans
192
 
             + task_msg
193
 
             )
 
201
        return (bar_string + trans + task_msg)
 
202
 
 
203
    def _repaint(self):
 
204
        s = self._render_line()
194
205
        self._show_line(s)
195
206
        self._have_output = True
196
207
 
197
208
    def show_progress(self, task):
 
209
        """Called by the task object when it has changed.
 
210
        
 
211
        :param task: The top task object; its parents are also included 
 
212
            by following links.
 
213
        """
 
214
        must_update = task is not self._last_task
198
215
        self._last_task = task
199
216
        now = time.time()
200
 
        if now < self._last_repaint + 0.1:
 
217
        if (not must_update) and (now < self._last_repaint + 0.1):
201
218
            return
202
 
        if now > self._transport_update_time + 5:
 
219
        if now > self._transport_update_time + 10:
203
220
            # no recent activity; expire it
204
221
            self._last_transport_msg = ''
205
222
        self._last_repaint = now
206
223
        self._repaint()
207
224
 
208
 
    def show_transport_activity(self, byte_count):
209
 
        """Called by transports as they do IO.
 
225
    def _show_transport_activity(self, transport, direction, byte_count):
 
226
        """Called by transports via the ui_factory, as they do IO.
210
227
 
211
228
        This may update a progress bar, spinner, or similar display.
212
229
        By default it does nothing.
223
240
            # guard against clock stepping backwards, and don't update too
224
241
            # often
225
242
            rate = self._bytes_since_update / (now - self._transport_update_time)
226
 
            msg = ("%6dkB @ %4dkB/s" %
227
 
                (self._total_byte_count>>10, int(rate)>>10,))
 
243
            scheme = getattr(transport, '_scheme', None) or repr(transport)
 
244
            if direction == 'read':
 
245
                dir_char = '>'
 
246
            elif direction == 'write':
 
247
                dir_char = '<'
 
248
            else:
 
249
                dir_char = '?'
 
250
            msg = ("%.7s %s %6dkB %5dkB/s" %
 
251
                    (scheme, dir_char, self._total_byte_count>>10, int(rate)>>10,))
228
252
            self._transport_update_time = now
229
253
            self._last_repaint = now
230
254
            self._bytes_since_update = 0