[PATCH 3 of 4] progress: add config knob to control delay before showing nested topics
Augie Fackler
durin42 at gmail.com
Tue Oct 19 12:48:30 CDT 2010
# HG changeset patch
# User Augie Fackler <durin42 at gmail.com>
# Date 1287454590 18000
# Node ID 57a07c97a5d50b475eab77eafa393b4811faebf7
# Parent 320cc52c723cd3ed845feaea1407dbdbd06100e8
progress: add config knob to control delay before showing nested topics
diff --git a/hgext/progress.py b/hgext/progress.py
--- a/hgext/progress.py
+++ b/hgext/progress.py
@@ -27,6 +27,7 @@
[progress]
delay = 3 # number of seconds (float) before showing the progress bar
+ nestdelay = 0.5 # time to wait before showing a nested progress topic
refresh = 0.1 # time in seconds between refreshes of the progress bar
format = topic bar number # format of the progress bar
width = <none> # if set, the maximum width of the progress information
@@ -61,6 +62,7 @@
def resetstate(self):
self.topics = []
+ self.pendingtopics = {}
self.printed = False
self.lastprint = time.time() + float(self.ui.config(
'progress', 'delay', default=3))
@@ -161,11 +163,21 @@
def progress(self, topic, pos, item='', unit='', total=None):
if pos is None:
+ self.pendingtopics.pop(topic, None)
if self.topics and self.topics[-1] == topic and self.printed:
self.complete()
self.resetstate()
else:
+ if self.topics:
+ if topic in self.pendingtopics:
+ if self.pendingtopics[topic] > time.time():
+ return
+ else:
+ self.pendingtopics[topic] = time.time() + float(
+ self.ui.config('progress', 'nestdelay', default=0.5))
+ return
if topic not in self.topics:
+ self.pendingtopics[topic] = 0
self.topics.append(topic)
now = time.time()
if (now - self.lastprint >= self.refresh
diff --git a/tests/test-progress.t b/tests/test-progress.t
--- a/tests/test-progress.t
+++ b/tests/test-progress.t
@@ -9,16 +9,24 @@
> total = loops
> if opts.get('total', None):
> total = int(opts.get('total'))
+ > nested = False
+ > if opts.get('nested', None):
+ > nested = True
> loops = abs(loops)
>
> for i in range(loops):
> ui.progress('loop', i, 'loop.%d' % i, 'loopnum', total)
+ > if nested:
+ > for j in range(2):
+ > ui.progress('nested', j, 'nested.%d' % j, 'nestnum', 2)
+ > ui.progress('nested', None, 'nested.done', 'nestnum', 2)
> ui.progress('loop', None, 'loop.done', 'loopnum', total)
>
> commands.norepo += " loop"
>
> cmdtable = {
- > "loop": (loop, [('', 'total', '', 'override for total')],
+ > "loop": (loop, [('', 'total', '', 'override for total'),
+ > ('', 'nested', False, 'show nested results')],
> 'hg loop LOOPS'),
> }
> EOF
@@ -53,6 +61,16 @@
loop [============================================> ] 2/3
+
+test nested short-lived topics (which shouldn't display):
+
+ $ hg -y loop 3 --nested 2>&1 | python filtercr.py
+
+ loop [ ] 0/3
+ loop [=====================> ] 1/3
+ loop [============================================> ] 2/3
+
+
test refresh is taken in account
$ hg -y --config progress.refresh=100 loop 3 2>&1 | python filtercr.py
More information about the Mercurial-devel
mailing list