Mercurial > public > mercurial-scm > hg
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 |