progress: react more reasonably to nested progress topics

Previously, we'd reset the entire progress bar state when a topic was
completed, even if it wasn't the outermost progress topic. Now we
print the state of the next progress topic on the stack if one is left
rather than reset the progress bar.
This commit is contained in:
Augie Fackler 2010-12-10 16:56:12 -06:00
parent dde38080ab
commit caa25014d3
2 changed files with 12 additions and 10 deletions

View File

@ -61,6 +61,7 @@ class progbar(object):
def resetstate(self):
self.topics = []
self.topicstates = {}
self.printed = False
self.lastprint = time.time() + float(self.ui.config(
'progress', 'delay', default=3))
@ -161,17 +162,24 @@ class progbar(object):
def progress(self, topic, pos, item='', unit='', total=None):
if pos is None:
if self.topics and self.topics[-1] == topic and self.printed:
self.topicstates.pop(topic, None)
# reset the progress bar if this is the outermost topic
if self.topics and self.topics[0] == topic and self.printed:
self.complete()
self.resetstate()
# truncate the list of topics assuming all topics within
# this one are also closed
if topic in self.topics:
self.topics = self.topics[:self.topics.index(topic)]
else:
if topic not in self.topics:
self.topics.append(topic)
now = time.time()
if (now - self.lastprint >= self.refresh
and topic == self.topics[-1]):
self.topicstates[topic] = pos, item, unit, total
if now - self.lastprint >= self.refresh and self.topics:
self.lastprint = now
self.show(topic, pos, item, unit, total)
current = self.topics[-1]
self.show(current, *self.topicstates[current])
def uisetup(ui):
class progressui(ui.__class__):

View File

@ -196,13 +196,11 @@ Test convert progress bar'
converting [=======> ] 1/7
scanning paths [ ] 0/1
getting files [==========================================================>] 1/1
converting [================> ] 2/7
scanning paths [ ] 0/2
scanning paths [============================> ] 1/2
getting files [=============> ] 1/4
getting files [============================> ] 2/4
getting files [===========================================> ] 3/4
@ -210,19 +208,16 @@ Test convert progress bar'
converting [=========================> ] 3/7
scanning paths [ ] 0/1
getting files [==========================================================>] 1/1
converting [==================================> ] 4/7
scanning paths [ ] 0/1
getting files [==========================================================>] 1/1
converting [===========================================> ] 5/7
scanning paths [ ] 0/3
scanning paths [==================> ] 1/3
scanning paths [=====================================> ] 2/3
getting files [======> ] 1/8
getting files [=============> ] 2/8
getting files [=====================> ] 3/8
@ -234,7 +229,6 @@ Test convert progress bar'
converting [====================================================> ] 6/7
scanning paths [ ] 0/1
getting files [======> ] 1/8
getting files [=============> ] 2/8
getting files [=====================> ] 3/8