Mercurial > hg
changeset 21132:350dc24a553d
ui: pushbuffer can now also capture stderr
We need an easy way to capture both stderr and stdout during bundle2 processing
of a remote bundle. This changeset adds simple changes to the `ui` class to make
this possible.
I expect the interface to change in future releases as bundle2 will probably want to
distinguish stdout and stderr. The current change will, however, do for now.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 16 Apr 2014 23:36:57 -0400 |
parents | b7435117d951 |
children | bef4a2adc532 |
files | mercurial/ui.py |
diffstat | 1 files changed, 11 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/ui.py Wed Apr 16 14:22:24 2014 -0400 +++ b/mercurial/ui.py Wed Apr 16 23:36:57 2014 -0400 @@ -12,7 +12,10 @@ class ui(object): def __init__(self, src=None): + # _buffers: used for temporary capture of output self._buffers = [] + # _bufferstates: Should the temporary capture includes stderr + self._bufferstates = [] self.quiet = self.verbose = self.debugflag = self.tracebackflag = False self._reportuntrusted = True self._ocfg = config.config() # overlay @@ -471,8 +474,12 @@ path = self.config('paths', default) return path or loc - def pushbuffer(self): + def pushbuffer(self, error=False): + """install a buffer to capture standar output of the ui object + + If error is True, the error output will be captured too.""" self._buffers.append([]) + self._bufferstates.append(error) def popbuffer(self, labeled=False): '''pop the last buffer and return the buffered output @@ -484,6 +491,7 @@ is being buffered so it can be captured and parsed or processed, labeled should not be set to True. ''' + self._bufferstates.pop() return "".join(self._buffers.pop()) def write(self, *args, **opts): @@ -511,6 +519,8 @@ def write_err(self, *args, **opts): try: + if self._bufferstates and self._bufferstates[-1]: + return self.write(*args, **opts) if not getattr(self.fout, 'closed', False): self.fout.flush() for a in args: