comparison mercurial/progress.py @ 29089:222b8170d69e stable

progress: stop excessive clearing (issue4801) The progress bar was being cleared on every write(), regardless of whether it was currently displayed. This could foul up the display of any writes that didn't include a linebreak. In particular, the win32 mode of the color extension was turning single prompt string writes into two writes, and the resulting clear/write/clear/write pattern was making the prompt invisible. We fix this by insisting that we have shown a progress bar and haven't just cleared it (setting lastprint to 0). Conveniently, the test suite already had instances of duplicate clears.. that are now cleared up.
author Matt Mackall <mpm@selenic.com>
date Fri, 06 May 2016 17:53:06 -0500
parents 2d20d1d2ea76
children cb1ea3cc44b5
comparison
equal deleted inserted replaced
29082:77de985d7c91 29089:222b8170d69e
161 sys.stderr.write('\r' + encoding.trim(out, termwidth)) 161 sys.stderr.write('\r' + encoding.trim(out, termwidth))
162 self.lasttopic = topic 162 self.lasttopic = topic
163 sys.stderr.flush() 163 sys.stderr.flush()
164 164
165 def clear(self): 165 def clear(self):
166 if not shouldprint(self.ui): 166 if not self.printed or not self.lastprint or not shouldprint(self.ui):
167 return 167 return
168 sys.stderr.write('\r%s\r' % (' ' * self.width())) 168 sys.stderr.write('\r%s\r' % (' ' * self.width()))
169 if self.printed: 169 if self.printed:
170 # force immediate re-paint of progress bar 170 # force immediate re-paint of progress bar
171 self.lastprint = 0 171 self.lastprint = 0