# HG changeset patch # User Joerg Sonnenberger # Date 2019-09-12 01:40:54 # Node ID 82879e06c92649a8e59ae8576a9e34a1ebb9ea48 # Parent a4da1c3b82ab381b66270a539feba8c6b1d6f1a7 ui: option to preserve the progress bar Some interface like the fast-import format of git are meant for pipe processing. It can be still desirable to have progress bars in this case, but clearing the bar after each output operation is not desirable. Differential Revision: https://phab.mercurial-scm.org/D6843 diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -1072,6 +1072,13 @@ class ui(object): Label names take the form of "topic.type". For example, ui.debug() issues a label of "ui.debug". + Progress reports via stderr are normally cleared before writing as + stdout and stderr go to the same terminal. This can be skipped with + the optional keyword argument "keepprogressbar". The progress bar + will continue to occupy a partial line on stderr in that case. + This functionality is intended when Mercurial acts as data source + in a pipe. + When labeling output for a specific command, a label of "cmdname.type" is recommended. For example, status issues a label of "status.modified" for modified files. @@ -1087,8 +1094,9 @@ class ui(object): self._buffers[-1].extend(args) return - # inliend _writenobuf() for speed - self._progclear() + # inlined _writenobuf() for speed + if not opts.get(r'keepprogressbar', False): + self._progclear() msg = b''.join(args) # opencode timeblockedsection because this is a critical path @@ -1126,7 +1134,8 @@ class ui(object): def _writenobuf(self, dest, *args, **opts): # update write() as well if you touch this code - self._progclear() + if not opts.get(r'keepprogressbar', False): + self._progclear() msg = b''.join(args) # opencode timeblockedsection because this is a critical path