~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/progress.py

  • Committer: Patch Queue Manager
  • Date: 2016-04-21 04:10:52 UTC
  • mfrom: (6616.1.1 fix-en-user-guide)
  • Revision ID: pqm@pqm.ubuntu.com-20160421041052-clcye7ns1qcl2n7w
(richard-wilbur) Ensure build of English use guide always uses English text
 even when user's locale specifies a different language. (Jelmer Vernooij)

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
 
 
18
17
"""Progress indicators.
19
18
 
20
19
The usual way to use this is via bzrlib.ui.ui_factory.nested_progress_bar which
21
20
will manage a conceptual stack of nested activities.
22
21
"""
23
22
 
 
23
from __future__ import absolute_import
24
24
 
25
 
import sys
26
25
import time
27
26
import os
28
27
 
29
28
 
30
 
from bzrlib.symbol_versioning import (
31
 
    deprecated_in,
32
 
    deprecated_method,
33
 
    )
34
 
 
35
 
 
36
29
def _supports_progress(f):
37
30
    """Detect if we can use pretty progress bars on file F.
38
31
 
65
58
    Code updating the task may also set fields as hints about how to display
66
59
    it: show_pct, show_spinner, show_eta, show_count, show_bar.  UIs
67
60
    will not necessarily respect all these fields.
68
 
    
 
61
 
 
62
    The message given when updating a task must be unicode, not bytes.
 
63
 
69
64
    :ivar update_latency: The interval (in seconds) at which the PB should be
70
65
        updated.  Setting this to zero suggests every update should be shown
71
66
        synchronously.
113
108
            self.msg)
114
109
 
115
110
    def update(self, msg, current_cnt=None, total_cnt=None):
 
111
        """Report updated task message and if relevent progress counters
 
112
 
 
113
        The message given must be unicode, not a byte string.
 
114
        """
116
115
        self.msg = msg
117
116
        self.current_cnt = current_cnt
118
117
        if total_cnt:
166
165
            self.ui_factory.clear_term()
167
166
 
168
167
 
169
 
# NOTE: This is also deprecated; you should provide a ProgressView instead.
170
 
class _BaseProgressBar(object):
171
 
 
172
 
    def __init__(self,
173
 
                 to_file=None,
174
 
                 show_pct=False,
175
 
                 show_spinner=False,
176
 
                 show_eta=False,
177
 
                 show_bar=True,
178
 
                 show_count=True,
179
 
                 to_messages_file=None,
180
 
                 _stack=None):
181
 
        object.__init__(self)
182
 
        if to_file is None:
183
 
            to_file = sys.stderr
184
 
        if to_messages_file is None:
185
 
            to_messages_file = sys.stdout
186
 
        self.to_file = to_file
187
 
        self.to_messages_file = to_messages_file
188
 
        self.last_msg = None
189
 
        self.last_cnt = None
190
 
        self.last_total = None
191
 
        self.show_pct = show_pct
192
 
        self.show_spinner = show_spinner
193
 
        self.show_eta = show_eta
194
 
        self.show_bar = show_bar
195
 
        self.show_count = show_count
196
 
        self._stack = _stack
197
 
        # seed throttler
198
 
        self.MIN_PAUSE = 0.1 # seconds
199
 
        now = time.time()
200
 
        # starting now
201
 
        self.start_time = now
202
 
        # next update should not throttle
203
 
        self.last_update = now - self.MIN_PAUSE - 1
204
 
 
205
 
    def finished(self):
206
 
        """Return this bar to its progress stack."""
207
 
        self.clear()
208
 
        self._stack.return_pb(self)
209
 
 
210
 
 
211
168
class DummyProgress(object):
212
169
    """Progress-bar standin that does nothing.
213
170