~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/progress.py

Got propogation under test

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
 
44
44
 
45
45
import bzrlib.errors as errors
 
46
from bzrlib.trace import mutter 
46
47
 
47
48
 
48
49
def _supports_progress(f):
157
158
    def update(self, msg=None, current=None, total=None):
158
159
        pass
159
160
 
 
161
    def child_update(self, message, current, total):
 
162
        pass
 
163
 
160
164
    def clear(self):
161
165
        pass
162
166
        
240
244
        
241
245
 
242
246
    def tick(self):
243
 
        self.update(self.last_msg, self.last_cnt, self.last_total)
244
 
                 
245
 
 
246
 
 
247
 
    def update(self, msg, current_cnt=None, total_cnt=None):
 
247
        self.update(self.last_msg, self.last_cnt, self.last_total, 
 
248
                    self.child_fraction)
 
249
 
 
250
    def update(self, msg, current_cnt=None, total_cnt=None, 
 
251
               child_fraction=0):
248
252
        """Update and redraw progress bar."""
 
253
        self.child_fraction = child_fraction
249
254
 
250
255
        if current_cnt < 0:
251
256
            current_cnt = 0
278
283
        self.spin_pos += 1
279
284
 
280
285
        if self.show_pct and total_cnt and current_cnt:
281
 
            pct = 100.0 * current_cnt / total_cnt
 
286
            pct = 100.0 * (current_cnt / total_cnt + child_fraction)
282
287
            pct_str = ' (%5.1f%%)' % pct
283
288
        else:
284
289
            pct_str = ''
326
331
        self.to_file.write('\r%s\r' % (' ' * (self.width - 1)))
327
332
        #self.to_file.flush()        
328
333
 
329
 
        
 
334
 
 
335
class ChildProgress(object):
 
336
    """A progress indicator that pushes its data to the parent"""
 
337
    def __init__(self, stack, *kwargs):
 
338
        self.parent = stack[-1]
 
339
        self.current = None
 
340
        self.total = None
 
341
        self.child_fraction = 0
 
342
        self.message = None
 
343
 
 
344
    def update(self, msg, current_cnt=None, total_cnt=None):
 
345
        self.current = current_cnt
 
346
        self.total = total_cnt
 
347
        self.message = msg
 
348
        self.child_fraction = 0
 
349
        self.tick()
 
350
 
 
351
    def child_update(self, message, current, total):
 
352
        self.child_fraction = float(current) / total
 
353
        self.tick()
 
354
 
 
355
    def tick(self):
 
356
        count = self.current+self.child_fraction
 
357
        if count > self.total:
 
358
            mutter('clamping count of %d to %d' % (count, self.total))
 
359
            count = self.total
 
360
        self.parent.child_update(self.message, count, self.total)
 
361
 
 
362
 
330
363
def str_tdelta(delt):
331
364
    if delt is None:
332
365
        return "-:--:--"