| Index: gclient_utils.py
|
| diff --git a/gclient_utils.py b/gclient_utils.py
|
| index 0ab322a2d1eab1492a0109e367ad2c0d19533677..8c75ecefac399a9be895ff63d6c40cff6caee76b 100644
|
| --- a/gclient_utils.py
|
| +++ b/gclient_utils.py
|
| @@ -266,7 +266,9 @@ def SubprocessCallAndFilter(command,
|
| in_directory,
|
| print_messages,
|
| print_stdout,
|
| - fail_status=None, filter_fn=None):
|
| + fail_status=None,
|
| + filter_fn=None,
|
| + stdout=None):
|
| """Runs command, a list, in directory in_directory.
|
|
|
| If print_messages is true, a message indicating what is being done
|
| @@ -287,9 +289,10 @@ def SubprocessCallAndFilter(command,
|
| exit with an exit status of fail_status. If fail_status is None (the
|
| default), gclient will raise an Error exception.
|
| """
|
| + stdout = stdout or sys.stdout
|
| logging.debug(command)
|
| if print_messages:
|
| - print('\n________ running \'%s\' in \'%s\''
|
| + stdout.write('\n________ running \'%s\' in \'%s\'\n'
|
| % (' '.join(command), in_directory))
|
|
|
| kid = Popen(command, bufsize=0, cwd=in_directory,
|
| @@ -298,7 +301,7 @@ def SubprocessCallAndFilter(command,
|
| # Do a flush of sys.stdout before we begin reading from the subprocess's
|
| # stdout.
|
| last_flushed_at = time.time()
|
| - sys.stdout.flush()
|
| + stdout.flush()
|
|
|
| # Also, we need to forward stdout to prevent weird re-ordering of output.
|
| # This has to be done on a per byte basis to make sure it is not buffered:
|
| @@ -310,10 +313,10 @@ def SubprocessCallAndFilter(command,
|
| if in_byte != '\r':
|
| if print_stdout:
|
| if not print_messages:
|
| - print('\n________ running \'%s\' in \'%s\''
|
| + stdout.write('\n________ running \'%s\' in \'%s\'\n'
|
| % (' '.join(command), in_directory))
|
| print_messages = True
|
| - sys.stdout.write(in_byte)
|
| + stdout.write(in_byte)
|
| if in_byte != '\n':
|
| in_line += in_byte
|
| if in_byte == '\n':
|
| @@ -325,7 +328,7 @@ def SubprocessCallAndFilter(command,
|
| # which can slow busy readers down.
|
| if (time.time() - last_flushed_at) > 10:
|
| last_flushed_at = time.time()
|
| - sys.stdout.flush()
|
| + stdout.flush()
|
| in_byte = kid.stdout.read(1)
|
| # Flush the rest of buffered output. This is only an issue with files not
|
| # ending with a \n.
|
| @@ -335,11 +338,9 @@ def SubprocessCallAndFilter(command,
|
|
|
| if rv:
|
| msg = 'failed to run command: %s' % ' '.join(command)
|
| -
|
| if fail_status != None:
|
| - print >> sys.stderr, msg
|
| + sys.stderr.write(msg + '\n')
|
| sys.exit(fail_status)
|
| -
|
| raise Error(msg)
|
|
|
|
|
|
|