This will be needed to hide the output of `git commit` when the
sequencer handles an interactive rebase's script.
Signed-off-by: Johannes Schindelin <redacted>
---
run-command.c | 23 +++++++++++++++++++++++
run-command.h | 1 +
2 files changed, 24 insertions(+)
diff --git a/run-command.c b/run-command.c
index ca905a9e80..5bb957afdd 100644
--- a/run-command.c
+++ b/run-command.c
@@ -589,6 +589,29 @@ int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const
cmd.clean_on_exit = opt & RUN_CLEAN_ON_EXIT ? 1 : 0;
cmd.dir = dir;
cmd.env = env;
+
+ if (opt & RUN_HIDE_STDERR_ON_SUCCESS) {
+ struct strbuf buf = STRBUF_INIT;
+ int res;
+
+ cmd.err = -1;
+ if (start_command(&cmd) < 0)
+ return -1;
+
+ if (strbuf_read(&buf, cmd.err, 0) < 0) {
+ close(cmd.err);
+ finish_command(&cmd); /* throw away exit code */
+ return -1;
+ }
+
+ close(cmd.err);
+ res = finish_command(&cmd);
+ if (res)
+ fputs(buf.buf, stderr);
+ strbuf_release(&buf);
+ return res;
+ }
+
return run_command(&cmd);
}
diff --git a/run-command.h b/run-command.h
index dd1c78c28d..65a21ddd4e 100644
--- a/run-command.h
+++ b/run-command.h
@@ -72,6 +72,7 @@ extern int run_hook_ve(const char *const *env, const char *name, va_list args);
#define RUN_SILENT_EXEC_FAILURE 8
#define RUN_USING_SHELL 16
#define RUN_CLEAN_ON_EXIT 32
+#define RUN_HIDE_STDERR_ON_SUCCESS 64
int run_command_v_opt(const char **argv, int opt);
/*
--
2.11.0.rc3.windows.1