[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