/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

  • Committer: John Arbash Meinel
  • Date: 2010-01-12 22:51:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4955.
  • Revision ID: john@arbash-meinel.com-20100112225131-he8h411p6aeeb947
Delay grabbing an output stream until we actually go to show a diff.

This makes the test suite happy, but it also seems to be reasonable.
If we aren't going to write anything, we don't need to hold an
output stream open.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2008, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
37
37
 
38
38
""")
39
39
 
40
 
from bzrlib.osutils import watch_sigwinch
41
 
 
42
40
from bzrlib.ui import (
43
41
    UIFactory,
44
42
    NullProgressView,
62
60
        self.stderr = stderr
63
61
        # paints progress, network activity, etc
64
62
        self._progress_view = self.make_progress_view()
65
 
        # hook up the signals to watch for terminal size changes
66
 
        watch_sigwinch()
67
 
 
68
 
    def be_quiet(self, state):
69
 
        if state and not self._quiet:
70
 
            self.clear_term()
71
 
        UIFactory.be_quiet(self, state)
72
 
        self._progress_view = self.make_progress_view()
73
 
 
 
63
        
74
64
    def clear_term(self):
75
65
        """Prepare the terminal for output.
76
66
 
156
146
    def make_progress_view(self):
157
147
        """Construct and return a new ProgressView subclass for this UI.
158
148
        """
159
 
        # with --quiet, never any progress view
160
 
        # <https://bugs.edge.launchpad.net/bzr/+bug/320035>.  Otherwise if the
161
 
        # user specifically requests either text or no progress bars, always
162
 
        # do that.  otherwise, guess based on $TERM and tty presence.
163
 
        if self.is_quiet():
164
 
            return NullProgressView()
165
 
        elif os.environ.get('BZR_PROGRESS_BAR') == 'text':
 
149
        # if the user specifically requests either text or no progress bars,
 
150
        # always do that.  otherwise, guess based on $TERM and tty presence.
 
151
        if os.environ.get('BZR_PROGRESS_BAR') == 'text':
166
152
            return TextProgressView(self.stderr)
167
153
        elif os.environ.get('BZR_PROGRESS_BAR') == 'none':
168
154
            return NullProgressView()
242
228
            warnings.warn("%r updated but no tasks are active" %
243
229
                (task,))
244
230
        elif task != self._task_stack[-1]:
245
 
            # We used to check it was the top task, but it's hard to always
246
 
            # get this right and it's not necessarily useful: any actual
247
 
            # problems will be evident in use
248
 
            #warnings.warn("%r is not the top progress task %r" %
249
 
            #     (task, self._task_stack[-1]))
250
 
            pass
 
231
            warnings.warn("%r is not the top progress task %r" %
 
232
                (task, self._task_stack[-1]))
251
233
        self._progress_view.show_progress(task)
252
234
 
253
235
    def _progress_all_finished(self):
254
236
        self._progress_view.clear()
255
237
 
256
 
    def show_user_warning(self, warning_id, **message_args):
257
 
        """Show a text message to the user.
258
 
 
259
 
        Explicitly not for warnings about bzr apis, deprecations or internals.
260
 
        """
261
 
        # eventually trace.warning should migrate here, to avoid logging and
262
 
        # be easier to test; that has a lot of test fallout so for now just
263
 
        # new code can call this
264
 
        if warning_id not in self.suppressed_warnings:
265
 
            self.stderr.write(self.format_user_warning(warning_id, message_args) +
266
 
                '\n')
267
 
 
268
238
 
269
239
class TextProgressView(object):
270
240
    """Display of progress bar and other information on a tty.
437
407
        elif now >= (self._transport_update_time + 0.5):
438
408
            # guard against clock stepping backwards, and don't update too
439
409
            # often
440
 
            rate = (self._bytes_since_update
441
 
                    / (now - self._transport_update_time))
442
 
            # using base-10 units (see HACKING.txt).
443
 
            msg = ("%6dkB %5dkB/s" %
444
 
                    (self._total_byte_count / 1000, int(rate) / 1000,))
 
410
            rate = self._bytes_since_update / (now - self._transport_update_time)
 
411
            msg = ("%6dKB %5dKB/s" %
 
412
                    (self._total_byte_count>>10, int(rate)>>10,))
445
413
            self._transport_update_time = now
446
414
            self._last_repaint = now
447
415
            self._bytes_since_update = 0
457
425
                transfer_time = 0.001
458
426
            bps = self._total_byte_count / transfer_time
459
427
 
460
 
        # using base-10 units (see HACKING.txt).
461
 
        msg = ('Transferred: %.0fkB'
462
 
               ' (%.1fkB/s r:%.0fkB w:%.0fkB'
463
 
               % (self._total_byte_count / 1000.,
464
 
                  bps / 1000.,
465
 
                  self._bytes_by_direction['read'] / 1000.,
466
 
                  self._bytes_by_direction['write'] / 1000.,
 
428
        msg = ('Transferred: %.0fKiB'
 
429
               ' (%.1fK/s r:%.0fK w:%.0fK'
 
430
               % (self._total_byte_count / 1024.,
 
431
                  bps / 1024.,
 
432
                  self._bytes_by_direction['read'] / 1024.,
 
433
                  self._bytes_by_direction['write'] / 1024.,
467
434
                 ))
468
435
        if self._bytes_by_direction['unknown'] > 0:
469
 
            msg += ' u:%.0fkB)' % (
470
 
                self._bytes_by_direction['unknown'] / 1000.
 
436
            msg += ' u:%.0fK)' % (
 
437
                self._bytes_by_direction['unknown'] / 1024.
471
438
                )
472
439
        else:
473
440
            msg += ')'