~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/progress.py

Magnus Thernings patch to remove status --revision, adjusted to update help.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
import sys
40
40
import time
41
41
import os
42
 
from collections import deque
43
42
 
44
43
 
45
44
def _width():
167
166
        self.width = _width()
168
167
        self.start_time = None
169
168
        self.last_update = None
170
 
        self.last_updates = deque()
171
169
    
172
170
 
173
171
    def throttle(self):
181
179
            if interval > 0 and interval < self.MIN_PAUSE:
182
180
                return True
183
181
 
184
 
        self.last_updates.append(now - self.last_update)
185
182
        self.last_update = now
186
183
        return False
187
184
        
194
191
    def update(self, msg, current_cnt=None, total_cnt=None):
195
192
        """Update and redraw progress bar."""
196
193
 
197
 
        if current_cnt < 0:
198
 
            current_cnt = 0
199
 
            
200
 
        if current_cnt > total_cnt:
201
 
            total_cnt = current_cnt
202
 
 
203
194
        # save these for the tick() function
204
195
        self.last_msg = msg
205
196
        self.last_cnt = current_cnt
208
199
        if self.throttle():
209
200
            return 
210
201
        
 
202
        if total_cnt:
 
203
            assert current_cnt <= total_cnt
 
204
        if current_cnt:
 
205
            assert current_cnt >= 0
 
206
        
211
207
        if self.show_eta and self.start_time and total_cnt:
212
 
            eta = get_eta(self.start_time, current_cnt, total_cnt,
213
 
                    last_updates = self.last_updates)
 
208
            eta = get_eta(self.start_time, current_cnt, total_cnt)
214
209
            eta_str = " " + str_tdelta(eta)
215
210
        else:
216
211
            eta_str = ""
284
279
                             delt % 60)
285
280
 
286
281
 
287
 
def get_eta(start_time, current, total, enough_samples=3, last_updates=None, n_recent=10):
 
282
def get_eta(start_time, current, total, enough_samples=3):
288
283
    if start_time is None:
289
284
        return None
290
285
 
306
301
 
307
302
    assert total_duration >= elapsed
308
303
 
309
 
    if last_updates and len(last_updates) >= n_recent:
310
 
        while len(last_updates) > n_recent:
311
 
            last_updates.popleft()
312
 
        avg = sum(last_updates) / float(len(last_updates))
313
 
        time_left = avg * (total - current)
314
 
 
315
 
        old_time_left = total_duration - elapsed
316
 
 
317
 
        # We could return the average, or some other value here
318
 
        return (time_left + old_time_left) / 2
319
 
 
320
304
    return total_duration - elapsed
321
305
 
322
306