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.