~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/progress.py

  • Committer: Martin Pool
  • Date: 2005-06-10 08:53:22 UTC
  • Revision ID: mbp@sourcefrog.net-20050610085322-aeddd526f6fa9b6a
- use plain unix time, not datetime module

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
 
41
41
 
42
42
import sys
43
 
import datetime
 
43
import time
44
44
 
45
45
 
46
46
def _width():
113
113
    def update(self, msg, current_cnt, total_cnt=None):
114
114
        """Update and redraw progress bar."""
115
115
        if self.start_time is None:
116
 
            self.start_time = datetime.datetime.now()
 
116
            self.start_time = time.time()
117
117
 
118
118
        # save these for the tick() function
119
119
        self.last_msg = msg
198
198
    
199
199
 
200
200
        
201
 
def divide_timedelta(delt, divisor):
202
 
    """Divides a timedelta object"""
203
 
    return datetime.timedelta(float(delt.days)/divisor, 
204
 
                              float(delt.seconds)/divisor, 
205
 
                              float(delt.microseconds)/divisor)
206
 
 
207
201
def str_tdelta(delt):
208
202
    if delt is None:
209
203
        return "-:--:--"
210
 
    return str(datetime.timedelta(delt.days, delt.seconds))
211
 
 
212
 
 
213
 
def get_eta(start_time, current, total, enough_samples=20):
214
 
    if start_time is None or current == 0:
215
 
        return None
216
 
    elif current < enough_samples:
217
 
        # FIXME: No good if it's not a count
218
 
        return None
219
 
    elapsed = datetime.datetime.now() - start_time
220
 
    total_duration = divide_timedelta(elapsed * long(total), 
221
 
                                      current)
222
 
    if elapsed < total_duration:
223
 
        eta = total_duration - elapsed
224
 
    else:
225
 
        eta = total_duration - total_duration
226
 
    return eta
 
204
    delt = int(round(delt))
 
205
    return '%d:%02d:%02d' % (delt/3600,
 
206
                             (delt/60) % 60,
 
207
                             delt % 60)
 
208
 
 
209
 
 
210
def get_eta(start_time, current, total, enough_samples=3):
 
211
    if start_time is None:
 
212
        return None
 
213
 
 
214
    if not total:
 
215
        return None
 
216
 
 
217
    if current < enough_samples:
 
218
        return None
 
219
 
 
220
    if current > total:
 
221
        return None                     # wtf?
 
222
 
 
223
    elapsed = time.time() - start_time
 
224
 
 
225
    if elapsed < 2.0:                   # not enough time to estimate
 
226
        return None
 
227
    
 
228
    total_duration = float(elapsed) * float(total) / float(current)
 
229
 
 
230
    assert total_duration >= elapsed
 
231
 
 
232
    return total_duration - elapsed
227
233
 
228
234
 
229
235
def run_tests():