diff --git a/hgext/progress.py b/hgext/progress.py --- a/hgext/progress.py +++ b/hgext/progress.py @@ -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__): diff --git a/tests/test-convert-svn-move.t b/tests/test-convert-svn-move.t --- a/tests/test-convert-svn-move.t +++ b/tests/test-convert-svn-move.t @@ -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