pull: pass verbosity, --progress flags to fetch and merge

7f87aff (Teach/Fix pull/fetch -q/-v options, 2008-11-15) taught git-pull to accept the verbosity -v and -q options and pass them to git-fetch and git-merge. Re-implement support for the verbosity flags by adding it to the options list and introducing argv_push_verbosity() to push the flags into the argv array used to execute git-fetch and git-merge. 9839018 (fetch and pull: learn --progress, 2010-02-24) and bebd2fd (pull: propagate --progress to merge, 2011-02-20) taught git-pull to accept the --progress option and pass it to git-fetch and git-merge. Use OPT_PASSTHRU() implemented earlier to pass the "--[no-]progress" command line options to git-fetch and git-merge. Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Paul Tan <pyokagan@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Paul Tan committed Jun 14, 2015 at 16:41 UTC 2a747902c3290efba0ba44c77cf2e5692d998af2
1 file changed +36
builtin/pull.c
+36
@@ -16,10 +16,34 @@ static const char * const pull_usage[] = {
16 NULL
17 };
18
19 +/* Shared options */
20 +static int opt_verbosity;
21 +static char *opt_progress;
22 +
23 static struct option pull_options[] = {
24 + /* Shared options */
25 + OPT__VERBOSITY(&opt_verbosity),
26 + OPT_PASSTHRU(0, "progress", &opt_progress, NULL,
27 + N_("force progress reporting"),
28 + PARSE_OPT_NOARG),
29 +
30 OPT_END()
31 };
32
33 +/**
34 + * Pushes "-q" or "-v" switches into arr to match the opt_verbosity level.
35 + */
36 +static void argv_push_verbosity(struct argv_array *arr)
37 +{
38 + int verbosity;
39 +
40 + for (verbosity = opt_verbosity; verbosity > 0; verbosity--)
41 + argv_array_push(arr, "-v");
42 +
43 + for (verbosity = opt_verbosity; verbosity < 0; verbosity++)
44 + argv_array_push(arr, "-q");
45 +}
46 +
47 /**
48 * Parses argv into [<repo> [<refspecs>...]], returning their values in `repo`
49 * as a string and `refspecs` as a null-terminated array of strings. If `repo`
@@ -46,6 +70,12 @@ static int run_fetch(const char *repo, const char **refspecs)
70 int ret;
71
72 argv_array_pushl(&args, "fetch", "--update-head-ok", NULL);
73 +
74 + /* Shared options */
75 + argv_push_verbosity(&args);
76 + if (opt_progress)
77 + argv_array_push(&args, opt_progress);
78 +
79 if (repo) {
80 argv_array_push(&args, repo);
81 argv_array_pushv(&args, refspecs);
@@ -65,6 +95,12 @@ static int run_merge(void)
95 struct argv_array args = ARGV_ARRAY_INIT;
96
97 argv_array_pushl(&args, "merge", NULL);
98 +
99 + /* Shared options */
100 + argv_push_verbosity(&args);
101 + if (opt_progress)
102 + argv_array_push(&args, opt_progress);
103 +
104 argv_array_push(&args, "FETCH_HEAD");
105 ret = run_command_v_opt(args.argv, RUN_GIT_CMD);
106 argv_array_clear(&args);