/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/progress.py

  • Committer: Robert Collins
  • Date: 2010-05-06 11:08:10 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506110810-h3j07fh5gmw54s25
Cleaner matcher matching revised unlocking protocol.

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
 
17
18
"""Progress indicators.
18
19
 
19
20
The usual way to use this is via bzrlib.ui.ui_factory.nested_progress_bar which
20
21
will manage a conceptual stack of nested activities.
21
22
"""
22
23
 
23
 
from __future__ import absolute_import
24
24
 
 
25
import sys
25
26
import time
26
27
import os
27
28
 
28
29
 
 
30
from bzrlib.symbol_versioning import (
 
31
    deprecated_in,
 
32
    deprecated_method,
 
33
    )
 
34
 
 
35
 
29
36
def _supports_progress(f):
30
37
    """Detect if we can use pretty progress bars on file F.
31
38
 
145
152
                own_fraction = 0.0
146
153
            return self._parent_task._overall_completion_fraction(own_fraction)
147
154
 
 
155
    @deprecated_method(deprecated_in((2, 1, 0)))
 
156
    def note(self, fmt_string, *args):
 
157
        """Record a note without disrupting the progress bar.
 
158
        
 
159
        Deprecated: use ui_factory.note() instead or bzrlib.trace.  Note that
 
160
        ui_factory.note takes just one string as the argument, not a format
 
161
        string and arguments.
 
162
        """
 
163
        if args:
 
164
            self.ui_factory.note(fmt_string % args)
 
165
        else:
 
166
            self.ui_factory.note(fmt_string)
 
167
 
148
168
    def clear(self):
149
169
        # TODO: deprecate this method; the model object shouldn't be concerned
150
170
        # with whether it's shown or not.  Most callers use this because they
159
179
            self.ui_factory.clear_term()
160
180
 
161
181
 
 
182
# NOTE: This is also deprecated; you should provide a ProgressView instead.
 
183
class _BaseProgressBar(object):
 
184
 
 
185
    def __init__(self,
 
186
                 to_file=None,
 
187
                 show_pct=False,
 
188
                 show_spinner=False,
 
189
                 show_eta=False,
 
190
                 show_bar=True,
 
191
                 show_count=True,
 
192
                 to_messages_file=None,
 
193
                 _stack=None):
 
194
        object.__init__(self)
 
195
        if to_file is None:
 
196
            to_file = sys.stderr
 
197
        if to_messages_file is None:
 
198
            to_messages_file = sys.stdout
 
199
        self.to_file = to_file
 
200
        self.to_messages_file = to_messages_file
 
201
        self.last_msg = None
 
202
        self.last_cnt = None
 
203
        self.last_total = None
 
204
        self.show_pct = show_pct
 
205
        self.show_spinner = show_spinner
 
206
        self.show_eta = show_eta
 
207
        self.show_bar = show_bar
 
208
        self.show_count = show_count
 
209
        self._stack = _stack
 
210
        # seed throttler
 
211
        self.MIN_PAUSE = 0.1 # seconds
 
212
        now = time.time()
 
213
        # starting now
 
214
        self.start_time = now
 
215
        # next update should not throttle
 
216
        self.last_update = now - self.MIN_PAUSE - 1
 
217
 
 
218
    def finished(self):
 
219
        """Return this bar to its progress stack."""
 
220
        self.clear()
 
221
        self._stack.return_pb(self)
 
222
 
 
223
    def note(self, fmt_string, *args, **kwargs):
 
224
        """Record a note without disrupting the progress bar."""
 
225
        self.clear()
 
226
        self.to_messages_file.write(fmt_string % args)
 
227
        self.to_messages_file.write('\n')
 
228
 
 
229
 
162
230
class DummyProgress(object):
163
231
    """Progress-bar standin that does nothing.
164
232
 
180
248
    def clear(self):
181
249
        pass
182
250
 
 
251
    def note(self, fmt_string, *args, **kwargs):
 
252
        """See _BaseProgressBar.note()."""
 
253
 
183
254
    def child_progress(self, **kwargs):
184
255
        return DummyProgress(**kwargs)
185
256