`rebase --exec` doesn't obey --quiet and ends up printing a few messages about the command being executed: git rebase HEAD~3 --quiet --exec "printf foo >/dev/null" Executing: printf foo >/dev/null Executing: printf foo >/dev/null Executing: printf foo >/dev/null Let's fix that. Reported-by: Lincoln Yuji <lincolnyuji@xxxxxxxxxxx> Reported-by: Rodrigo Siqueira <siqueirajordao@xxxxxxxxxx> Signed-off-by: Matheus Tavares <matheus.tavb@xxxxxxxxx> --- Changes in v2: - Applied commit message fixes by Patrick. - Fixed codestyle. - Added regression test. - Also checked "!opt->quiet" before calling term_clear_line() (this would only print whitspaces, so no direct impact for users, but the bytes are still there when the output is captured by scripts, like the test script :) - Added Lincoln as one of the reporters. sequencer.c | 13 +++++++------ t/t3400-rebase.sh | 7 +++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sequencer.c b/sequencer.c index 0291920f0b..79d577e676 100644 --- a/sequencer.c +++ b/sequencer.c @@ -3793,12 +3793,13 @@ static int error_failed_squash(struct repository *r, return error_with_patch(r, commit, subject, subject_len, opts, 1, 0); } -static int do_exec(struct repository *r, const char *command_line) +static int do_exec(struct repository *r, const char *command_line, int quiet) { struct child_process cmd = CHILD_PROCESS_INIT; int dirty, status; - fprintf(stderr, _("Executing: %s\n"), command_line); + if (!quiet) + fprintf(stderr, _("Executing: %s\n"), command_line); cmd.use_shell = 1; strvec_push(&cmd.args, command_line); strvec_push(&cmd.env, "GIT_CHERRY_PICK_HELP"); @@ -4902,7 +4903,7 @@ static int pick_one_commit(struct repository *r, if (item->command == TODO_EDIT) { struct commit *commit = item->commit; if (!res) { - if (!opts->verbose) + if (!opts->quiet && !opts->verbose) term_clear_line(); fprintf(stderr, _("Stopped at %s... %.*s\n"), short_commit_name(r, commit), item->arg_len, arg); @@ -4994,7 +4995,7 @@ static int pick_commits(struct repository *r, NULL, REF_NO_DEREF); if (item->command == TODO_BREAK) { - if (!opts->verbose) + if (!opts->quiet && !opts->verbose) term_clear_line(); return stopped_at_head(r); } @@ -5010,10 +5011,10 @@ static int pick_commits(struct repository *r, char *end_of_arg = (char *)(arg + item->arg_len); int saved = *end_of_arg; - if (!opts->verbose) + if (!opts->quiet && !opts->verbose) term_clear_line(); *end_of_arg = '\0'; - res = do_exec(r, arg); + res = do_exec(r, arg, opts->quiet); *end_of_arg = saved; if (res) { diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh index ae34bfad60..15b3228c6e 100755 --- a/t/t3400-rebase.sh +++ b/t/t3400-rebase.sh @@ -235,6 +235,13 @@ test_expect_success 'rebase --merge -q is quiet' ' test_must_be_empty output.out ' +test_expect_success 'rebase --exec -q is quiet' ' + git checkout -B quiet topic && + git rebase --exec true -q main >output.out 2>&1 && + test_must_be_empty output.out + +' + test_expect_success 'Rebase a commit that sprinkles CRs in' ' ( echo "One" && -- 2.46.0