diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-03-07 10:53:10 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-03-07 10:53:10 -0800 |
commit | 792f0e7d1a156379fb71deb2e65c349c595a9202 (patch) | |
tree | 9eb99a272d923a3490be8e0f4cda3c6303f60859 | |
parent | b9217642ef2db34e2cbeaef8d4439b07a03027cd (diff) | |
parent | ce2cf27adc434c11cd1e91bcacf00297efd8cc92 (diff) | |
download | git-792f0e7d1a156379fb71deb2e65c349c595a9202.tar.gz |
Merge branch 'cc/run-command'
* cc/run-command:
run-command: Redirect stderr to a pipe before redirecting stdout to stderr
-rw-r--r-- | Documentation/technical/api-run-command.txt | 7 | ||||
-rw-r--r-- | run-command.c | 14 |
2 files changed, 11 insertions, 10 deletions
diff --git a/Documentation/technical/api-run-command.txt b/Documentation/technical/api-run-command.txt index fde3b45321..c364a22c8f 100644 --- a/Documentation/technical/api-run-command.txt +++ b/Documentation/technical/api-run-command.txt @@ -111,9 +111,10 @@ stderr as follows: .no_stdin, .no_stdout, .no_stderr: The respective channel is redirected to /dev/null. - .stdout_to_stderr: stdout of the child is redirected to the - parent's stderr (i.e. *not* to what .err or - .no_stderr specify). + .stdout_to_stderr: stdout of the child is redirected to its + stderr. This happens after stderr is itself redirected. + So stdout will follow stderr to wherever it is + redirected. To modify the environment of the sub-process, specify an array of string pointers (NULL terminated) in .env: diff --git a/run-command.c b/run-command.c index 743757c36e..44100a749b 100644 --- a/run-command.c +++ b/run-command.c @@ -91,6 +91,13 @@ int start_command(struct child_process *cmd) close(cmd->in); } + if (cmd->no_stderr) + dup_devnull(2); + else if (need_err) { + dup2(fderr[1], 2); + close_pair(fderr); + } + if (cmd->no_stdout) dup_devnull(1); else if (cmd->stdout_to_stderr) @@ -103,13 +110,6 @@ int start_command(struct child_process *cmd) close(cmd->out); } - if (cmd->no_stderr) - dup_devnull(2); - else if (need_err) { - dup2(fderr[1], 2); - close_pair(fderr); - } - if (cmd->dir && chdir(cmd->dir)) die("exec %s: cd to %s failed (%s)", cmd->argv[0], cmd->dir, strerror(errno)); |