[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