| Index: gclient_utils.py
|
| diff --git a/gclient_utils.py b/gclient_utils.py
|
| index 8c75ecefac399a9be895ff63d6c40cff6caee76b..e0c9e8e276c2532c14b2669b6796641aacd24034 100644
|
| --- a/gclient_utils.py
|
| +++ b/gclient_utils.py
|
| @@ -251,52 +251,51 @@ def RemoveDirectory(*path):
|
| os.rmdir(file_path)
|
|
|
|
|
| -def SubprocessCall(command, in_directory, fail_status=None):
|
| - """Runs command, a list, in directory in_directory.
|
| +def SubprocessCall(args, **kwargs):
|
| + """Wraps SubprocessCallAndFilter() with different default arguments.
|
|
|
| - This function wraps SubprocessCallAndFilter, but does not perform the
|
| - filtering functions. See that function for a more complete usage
|
| - description.
|
| - """
|
| - # Call subprocess and capture nothing:
|
| - SubprocessCallAndFilter(command, in_directory, True, True, fail_status)
|
| + Calls subprocess and capture nothing."""
|
| + kwargs['print_messages'] = True
|
| + kwargs['print_stdout'] = True
|
| + return SubprocessCallAndFilter(args, **kwargs)
|
|
|
|
|
| -def SubprocessCallAndFilter(command,
|
| - in_directory,
|
| - print_messages,
|
| - print_stdout,
|
| - fail_status=None,
|
| - filter_fn=None,
|
| - stdout=None):
|
| - """Runs command, a list, in directory in_directory.
|
| +def SubprocessCallAndFilter(args, **kwargs):
|
| + """Runs a command and prints a header line if appropriate.
|
|
|
| - If print_messages is true, a message indicating what is being done
|
| - is printed to stdout. If print_messages is false, the message is printed
|
| - only if we actually need to print something else as well, so you can
|
| - get the context of the output. If print_messages is false and print_stdout
|
| - is false, no output at all is generated.
|
| + If |print_messages| is True, a message indicating what is being done
|
| + is printed to stdout. Otherwise the message is printed only if the call
|
| + generated any ouput. If both |print_messages| and |print_stdout| are False,
|
| + no output at all is generated.
|
|
|
| - Also, if print_stdout is true, the command's stdout is also forwarded
|
| - to stdout.
|
| + If |print_stdout| is True, the command's stdout is also forwarded to stdout.
|
|
|
| - If a filter_fn function is specified, it is expected to take a single
|
| + If |filter_fn| function is specified, it is expected to take a single
|
| string argument, and it will be called with each line of the
|
| subprocess's output. Each line has had the trailing newline character
|
| trimmed.
|
|
|
| If the command fails, as indicated by a nonzero exit status, gclient will
|
| - exit with an exit status of fail_status. If fail_status is None (the
|
| + exit with an exit status of fail_status. If fail_status is None (the
|
| default), gclient will raise an Error exception.
|
| +
|
| + Other subprocess.Popen parameters can be specified.
|
| """
|
| - stdout = stdout or sys.stdout
|
| - logging.debug(command)
|
| + stdout = kwargs.pop('stdout', sys.stdout) or sys.stdout
|
| + assert not 'stderr' in kwargs
|
| + filter_fn = kwargs.pop('filter_fn', None)
|
| + print_messages = kwargs.pop('print_messages', False)
|
| + print_stdout = kwargs.pop('print_stdout', False)
|
| + fail_status = kwargs.pop('fail_status', None)
|
| +
|
| + logging.debug(args)
|
| if print_messages:
|
| stdout.write('\n________ running \'%s\' in \'%s\'\n'
|
| - % (' '.join(command), in_directory))
|
| + % (' '.join(args), kwargs['cwd']))
|
|
|
| - kid = Popen(command, bufsize=0, cwd=in_directory,
|
| - stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
| + kid = Popen(args, bufsize=0,
|
| + stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
| + **kwargs)
|
|
|
| # Do a flush of sys.stdout before we begin reading from the subprocess's
|
| # stdout.
|
| @@ -314,7 +313,7 @@ def SubprocessCallAndFilter(command,
|
| if print_stdout:
|
| if not print_messages:
|
| stdout.write('\n________ running \'%s\' in \'%s\'\n'
|
| - % (' '.join(command), in_directory))
|
| + % (' '.join(args), kwargs['cwd']))
|
| print_messages = True
|
| stdout.write(in_byte)
|
| if in_byte != '\n':
|
| @@ -337,7 +336,7 @@ def SubprocessCallAndFilter(command,
|
| rv = kid.wait()
|
|
|
| if rv:
|
| - msg = 'failed to run command: %s' % ' '.join(command)
|
| + msg = 'failed to run command: %s' % ' '.join(args)
|
| if fail_status != None:
|
| sys.stderr.write(msg + '\n')
|
| sys.exit(fail_status)
|
|
|