From: Johannes Schindelin Date: Mon, 2 Jan 2017 15:35:34 +0000 (+0100) Subject: sequencer (rebase -i): show only failed `git commit`'s output X-Git-Tag: v2.12.0-rc0~38^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a757c4970837162dfe4a64b70a428209c135641;p=git sequencer (rebase -i): show only failed `git commit`'s output This is the behavior of the shell script version of the interactive rebase, by using the `output` function defined in `git-rebase.sh`. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- diff --git a/sequencer.c b/sequencer.c index 6d5d6c3e9b..84534ee057 100644 --- a/sequencer.c +++ b/sequencer.c @@ -610,6 +610,11 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts, cmd.git_cmd = 1; if (is_rebase_i(opts)) { + if (!edit) { + cmd.stdout_to_stderr = 1; + cmd.err = -1; + } + if (read_env_script(&cmd.env_array)) { const char *gpg_opt = gpg_sign_opt_quoted(opts); @@ -644,6 +649,19 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts, if (opts->allow_empty_message) argv_array_push(&cmd.args, "--allow-empty-message"); + if (cmd.err == -1) { + /* hide stderr on success */ + struct strbuf buf = STRBUF_INIT; + int rc = pipe_command(&cmd, + NULL, 0, + /* stdout is already redirected */ + NULL, 0, + &buf, 0); + if (rc) + fputs(buf.buf, stderr); + strbuf_release(&buf); + return rc; + } return run_command(&cmd); }