This commit introduces a rebase option `--quiet`. While `--quiet` is
commonly perceived as opposite to `--verbose`, this is not the case for
the rebase command: both `--quiet` and `--verbose` default to `false` if
neither `--quiet` nor `--verbose` is present.

This commit goes further and introduces `--no-quiet` which is the
contrary of `--quiet` and it's introduction doesn't modify any
behaviour.

Note: The `flags` field in `rebase_options` will accumulate more bits in
subsequent commits, in particular a verbose and a diffstat flag. And as
--quoet inthe shell scripted version of the rebase command switches off
--verbose and --stat, and as --verbose switches off --quiet, we use the
(negated) REBASE_NO_QUIET instead of REBASE_QUIET: this allows us to
turn off the quiet mode and turn on the verbose and diffstat mode in a
single OPT_BIT(), and the opposite in a single OPT_NEGBIT().

Signed-off-by: Pratik Karki <predatoram...@gmail.com>
---
 builtin/rebase.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/builtin/rebase.c b/builtin/rebase.c
index b79f9b0a9f..19fa4d3fc4 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -79,6 +79,10 @@ struct rebase_options {
        int root;
        struct commit *restrict_revision;
        int dont_finish_rebase;
+       enum {
+               REBASE_NO_QUIET = 1<<0,
+       } flags;
+       struct strbuf git_am_opt;
 };
 
 /* Returns the filename prefixed by the state_dir */
@@ -159,6 +163,9 @@ static int run_specific_rebase(struct rebase_options *opts)
        add_var(&script_snippet, "revisions", opts->revisions);
        add_var(&script_snippet, "restrict_revision", opts->restrict_revision ?
                oid_to_hex(&opts->restrict_revision->object.oid) : NULL);
+       add_var(&script_snippet, "GIT_QUIET",
+               opts->flags & REBASE_NO_QUIET ? "" : "t");
+       add_var(&script_snippet, "git_am_opt", opts->git_am_opt.buf);
 
        switch (opts->type) {
        case REBASE_AM:
@@ -308,6 +315,8 @@ int cmd_rebase(int argc, const char **argv, const char 
*prefix)
 {
        struct rebase_options options = {
                .type = REBASE_UNSPECIFIED,
+               .flags = REBASE_NO_QUIET,
+               .git_am_opt = STRBUF_INIT,
        };
        const char *branch_name;
        int ret, flags;
@@ -321,6 +330,9 @@ int cmd_rebase(int argc, const char **argv, const char 
*prefix)
                           N_("rebase onto given branch instead of upstream")),
                OPT_BOOL(0, "no-verify", &ok_to_skip_pre_rebase,
                         N_("allow pre-rebase hook to run")),
+               OPT_NEGBIT('q', "quiet", &options.flags,
+                          N_("be quiet. implies --no-stat"),
+                          REBASE_NO_QUIET),
                OPT_END(),
        };
 
@@ -357,6 +369,9 @@ int cmd_rebase(int argc, const char **argv, const char 
*prefix)
                usage_with_options(builtin_rebase_usage,
                                   builtin_rebase_options);
 
+       if (!(options.flags & REBASE_NO_QUIET))
+               strbuf_addstr(&options.git_am_opt, " -q");
+
        switch (options.type) {
        case REBASE_MERGE:
        case REBASE_INTERACTIVE:
-- 
2.18.0

Reply via email to