[Pkg-bazaar-commits] ./bzr/unstable r660: - use plain unix time, not datetime module

Martin Pool mbp at sourcefrog.net
Fri Apr 10 08:20:37 UTC 2009


------------------------------------------------------------
revno: 660
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Fri 2005-06-10 18:53:22 +1000
message:
  - use plain unix time, not datetime module
modified:
  bzrlib/progress.py
-------------- next part --------------
=== modified file 'bzrlib/progress.py'
--- a/bzrlib/progress.py	2005-06-10 08:40:33 +0000
+++ b/bzrlib/progress.py	2005-06-10 08:53:22 +0000
@@ -40,7 +40,7 @@
 
 
 import sys
-import datetime
+import time
 
 
 def _width():
@@ -113,7 +113,7 @@
     def update(self, msg, current_cnt, total_cnt=None):
         """Update and redraw progress bar."""
         if self.start_time is None:
-            self.start_time = datetime.datetime.now()
+            self.start_time = time.time()
 
         # save these for the tick() function
         self.last_msg = msg
@@ -198,32 +198,38 @@
     
 
         
-def divide_timedelta(delt, divisor):
-    """Divides a timedelta object"""
-    return datetime.timedelta(float(delt.days)/divisor, 
-                              float(delt.seconds)/divisor, 
-                              float(delt.microseconds)/divisor)
-
 def str_tdelta(delt):
     if delt is None:
         return "-:--:--"
-    return str(datetime.timedelta(delt.days, delt.seconds))
-
-
-def get_eta(start_time, current, total, enough_samples=20):
-    if start_time is None or current == 0:
-        return None
-    elif current < enough_samples:
-        # FIXME: No good if it's not a count
-        return None
-    elapsed = datetime.datetime.now() - start_time
-    total_duration = divide_timedelta(elapsed * long(total), 
-                                      current)
-    if elapsed < total_duration:
-        eta = total_duration - elapsed
-    else:
-        eta = total_duration - total_duration
-    return eta
+    delt = int(round(delt))
+    return '%d:%02d:%02d' % (delt/3600,
+                             (delt/60) % 60,
+                             delt % 60)
+
+
+def get_eta(start_time, current, total, enough_samples=3):
+    if start_time is None:
+        return None
+
+    if not total:
+        return None
+
+    if current < enough_samples:
+        return None
+
+    if current > total:
+        return None                     # wtf?
+
+    elapsed = time.time() - start_time
+
+    if elapsed < 2.0:                   # not enough time to estimate
+        return None
+    
+    total_duration = float(elapsed) * float(total) / float(current)
+
+    assert total_duration >= elapsed
+
+    return total_duration - elapsed
 
 
 def run_tests():



More information about the Pkg-bazaar-commits mailing list