[PATCH] progress: handle non zero starts

timeless timeless at gmail.com
Mon Nov 15 02:14:28 UTC 2010


# HG changeset patch
# User timeless <timeless at gmail.com>
# Date 1289787260 21600
# Node ID 784da27bb453418e244de22a87496379cf48d445
# Parent  a862577669b427374281d19f2002e4e08141db77
progress: handle non zero starts
this handles hg rebase --cont where you start from 90/100

diff --git a/hgext/progress.py b/hgext/progress.py
--- a/hgext/progress.py
+++ b/hgext/progress.py
@@ -66,6 +66,7 @@ class progbar(object):
         self.topicstates = {}
         self.pendingtopics = {}
         self.starttimes = {}
+        self.startvals = {}
         self.printed = False
         self.lastprint = time.time() + float(self.ui.config(
             'progress', 'delay', default=3))
@@ -130,11 +131,14 @@ class progbar(object):
                 used += len(tail) + 1
             progwidth = termwidth - used - 3
             if total and pos <= total:
-                if pos > 0:
+                initial = self.startvals[topic]
+                target = total - initial
+                delta = pos - initial
+                if delta > 0:
                     elapsed = now - self.starttimes[topic]
                     if elapsed > float(
                         self.ui.config('progress', 'estimate', default=2)):
-                        seconds = (elapsed * (total - pos)) // pos + 1
+                        seconds = (elapsed * (target - delta)) // delta + 1
                         minutes = seconds // 60
                         if minutes < 10:
                             seconds -= minutes * 60
@@ -191,6 +195,7 @@ class progbar(object):
         if pos is None:
             self.pendingtopics.pop(topic, None)
             self.starttimes.pop(topic, None)
+            self.startvals.pop(topic, None)
             if self.topics and self.topics[0] == topic and self.printed:
                 self.complete()
                 self.resetstate()
@@ -208,6 +213,7 @@ class progbar(object):
             if topic not in self.topics:
                 self.pendingtopics[topic] = 0
                 self.starttimes[topic] = now
+                self.startvals[topic] = pos
                 self.topics.append(topic)
             self.topicstates[topic] = pos, item, unit, total
         if now - self.lastprint >= self.refresh and self.topics:



More information about the Mercurial-devel mailing list