Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/ui.py @ 47443:7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
We often silence the ui by calling `ui.pushbuffer()` followed (a later
in the code) by `ui.popbuffer()`. These places can be identified by
the fact that they ignore the output returned from
`ui.popbuffer()`. Let's create a context manager for these cases, to
avoid repetition, and to avoid accidentally leaving the ui silent on
exceptions. I deliberately called the new function `silent()` instead
of `buffered()`, because it's just an implementation detail that it
uses `pushbuffer()` and `popbuffer()`. We could later optimize it to
not buffer the output.
Differential Revision: https://phab.mercurial-scm.org/D10884
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 18 Jun 2021 15:48:51 -0700 |
parents | b1b3127227be |
children | 6000f5b25c9b |
comparison
equal
deleted
inserted
replaced
47442:6ecd0980d7f9 | 47443:7a430116f639 |
---|---|
1143 | 1143 |
1144 @fmsg.setter | 1144 @fmsg.setter |
1145 def fmsg(self, f): | 1145 def fmsg(self, f): |
1146 self._fmsg = f | 1146 self._fmsg = f |
1147 self._fmsgout, self._fmsgerr = _selectmsgdests(self) | 1147 self._fmsgout, self._fmsgerr = _selectmsgdests(self) |
1148 | |
1149 @contextlib.contextmanager | |
1150 def silent(self, error=False, subproc=False, labeled=False): | |
1151 self.pushbuffer(error=error, subproc=subproc, labeled=labeled) | |
1152 try: | |
1153 yield | |
1154 finally: | |
1155 self.popbuffer() | |
1148 | 1156 |
1149 def pushbuffer(self, error=False, subproc=False, labeled=False): | 1157 def pushbuffer(self, error=False, subproc=False, labeled=False): |
1150 """install a buffer to capture standard output of the ui object | 1158 """install a buffer to capture standard output of the ui object |
1151 | 1159 |
1152 If error is True, the error output will be captured too. | 1160 If error is True, the error output will be captured too. |