[PATCH 2 of 5] ui: allow capture of subprocess output
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Fri Apr 24 09:46:08 CDT 2015
On 04/24/2015 02:49 PM, Yuya Nishihara wrote:
> On Fri, 24 Apr 2015 00:56:22 +0100, Pierre-Yves David wrote:
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david at fb.com>
>> # Date 1429797459 -3600
>> # Thu Apr 23 14:57:39 2015 +0100
>> # Branch stable
>> # Node ID 8aea112e68b1f90f8b2917f06fd4081116502c64
>> # Parent 61a2951a30f7c18501027501f7642dd632e72fcd
>> ui: allow capture of subprocess output
>>
>> We want to capture hooks output during bundle2 processing. For this purpose we
>> introduce a new 'subproc' argument to 'ui.pushbuffer'. When set, the output of
>> sub process created through 'ui.system' will be captured in the buffer too.
>>
>> This will be used in the next changeset.
>
>> def write_err(self, *args, **opts):
>> try:
>> - if self._bufferstates and self._bufferstates[-1]:
>> + if self._bufferstates and self._bufferstates[-1][0]:
>> return self.write(*args, **opts)
>> if not getattr(self.fout, 'closed', False):
>> self.fout.flush()
>> for a in args:
>> self.ferr.write(str(a))
>> @@ -832,12 +836,15 @@ class ui(object):
>>
>> def system(self, cmd, environ={}, cwd=None, onerr=None, errprefix=None):
>> '''execute shell command with appropriate output stream. command
>> output will be redirected if fout is not stdout.
>> '''
>> + out = self.fout
>> + if util.any(s[1] for s in self._bufferstates):
>> + out = self
>
> Nitpick, why does it check any bufferstates unlike write_error() ?
The idea is to turn a "flag" on saying "now I want subprocess being
capture". So buffer push at lower level should not disable the
subprocess output capture.
That said write_error should probably do something similar.
That said², we should probably capture the errors output in the buffer
that request it (in both err and subprocess case but it does not seems
too critical for now/stable.
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list