diff options
-rw-r--r-- | Documentation/merge-options.txt | 10 | ||||
-rw-r--r-- | builtin/merge.c | 7 | ||||
-rw-r--r-- | merge-recursive.c | 1 | ||||
-rw-r--r-- | merge-recursive.h | 1 |
4 files changed, 18 insertions, 1 deletions
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt index e33e0f8e11..b613d4ed08 100644 --- a/Documentation/merge-options.txt +++ b/Documentation/merge-options.txt @@ -75,9 +75,17 @@ option can be used to override --squash. ifndef::git-pull[] -q:: --quiet:: - Operate quietly. + Operate quietly. Implies --no-progress. -v:: --verbose:: Be verbose. + +--progress:: +--no-progress:: + Turn progress on/off explicitly. If neither is specified, + progress is shown if standard error is connected to a terminal. + Note that not all merge strategies may support progress + reporting. + endif::git-pull[] diff --git a/builtin/merge.c b/builtin/merge.c index 42fff387e6..6ce8210501 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -58,6 +58,7 @@ static int option_renormalize; static int verbosity; static int allow_rerere_auto; static int abort_current_merge; +static int show_progress = -1; static struct strategy all_strategy[] = { { "recursive", DEFAULT_TWOHEAD | NO_TRIVIAL }, @@ -200,6 +201,7 @@ static struct option builtin_merge_options[] = { OPT__VERBOSITY(&verbosity), OPT_BOOLEAN(0, "abort", &abort_current_merge, "abort the current in-progress merge"), + OPT_SET_INT(0, "progress", &show_progress, "force progress reporting", 1), OPT_END() }; @@ -659,6 +661,8 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common, o.subtree_shift = ""; o.renormalize = option_renormalize; + o.show_rename_progress = + show_progress == -1 ? isatty(2) : show_progress; for (x = 0; x < xopts_nr; x++) if (parse_merge_opt(&o, xopts[x])) @@ -944,6 +948,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, builtin_merge_options, builtin_merge_usage, 0); + if (verbosity < 0 && show_progress == -1) + show_progress = 0; + if (abort_current_merge) { int nargc = 2; const char *nargv[] = {"reset", "--merge", NULL}; diff --git a/merge-recursive.c b/merge-recursive.c index 089aa10cc1..6c8f957712 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -441,6 +441,7 @@ static struct string_list *get_renames(struct merge_options *o, o->diff_rename_limit >= 0 ? o->diff_rename_limit : 1000; opts.rename_score = o->rename_score; + opts.show_rename_progress = o->show_rename_progress; opts.output_format = DIFF_FORMAT_NO_OUTPUT; if (diff_setup_done(&opts) < 0) die("diff setup failed"); diff --git a/merge-recursive.h b/merge-recursive.h index f0e056652f..59d1475be9 100644 --- a/merge-recursive.h +++ b/merge-recursive.h @@ -21,6 +21,7 @@ struct merge_options { int merge_rename_limit; int rename_score; int needed_rename_limit; + int show_rename_progress; int call_depth; struct strbuf obuf; struct string_list current_file_set; |