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.
Re-implement support for this flag by introducing the option callback
handler parse_opt_passthru(). This callback is used to pass the
--progress or --no-progress command-line switch to git-fetch and
git-merge.
Signed-off-by: Paul Tan pyoka...@gmail.com
---
Notes:
v2
* Use parse_opt_pass_strbuf().
builtin/pull.c | 36
1 file changed, 36 insertions(+)
diff --git a/builtin/pull.c b/builtin/pull.c
index 0ca23a3..c9c2cc0 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -16,11 +16,35 @@ static const char * const pull_usage[] = {
NULL
};
+/* Shared options */
+static int opt_verbosity;
+static struct strbuf opt_progress = STRBUF_INIT;
+
static struct option pull_options[] = {
+ /* Shared options */
+ OPT__VERBOSITY(opt_verbosity),
+ { OPTION_CALLBACK, 0, progress, opt_progress, NULL,
+ N_(force progress reporting),
+ PARSE_OPT_NOARG, parse_opt_pass_strbuf},
+
OPT_END()
};
/**
+ * Pushes -q or -v switches into arr to match the opt_verbosity level.
+ */
+static void argv_push_verbosity(struct argv_array *arr)
+{
+ int verbosity;
+
+ for (verbosity = opt_verbosity; verbosity 0; verbosity--)
+ argv_array_push(arr, -v);
+
+ for (verbosity = opt_verbosity; verbosity 0; verbosity++)
+ argv_array_push(arr, -q);
+}
+
+/**
* Parses argv into [repo [refspecs...]], returning their values in `repo`
* as a string and `refspecs` as a null-terminated array of strings. If `repo`
* is not provided in argv, it is set to NULL.
@@ -46,6 +70,12 @@ static int run_fetch(const char *repo, const char **refspecs)
int ret;
argv_array_pushl(args, fetch, --update-head-ok, NULL);
+
+ /* Shared options */
+ argv_push_verbosity(args);
+ if (opt_progress.len)
+ argv_array_push(args, opt_progress.buf);
+
if (repo)
argv_array_push(args, repo);
while (*refspecs)
@@ -64,6 +94,12 @@ static int run_merge(void)
struct argv_array args = ARGV_ARRAY_INIT;
argv_array_pushl(args, merge, NULL);
+
+ /* Shared options */
+ argv_push_verbosity(args);
+ if (opt_progress.len)
+ argv_array_push(args, opt_progress.buf);
+
argv_array_push(args, FETCH_HEAD);
ret = run_command_v_opt(args.argv, RUN_GIT_CMD);
argv_array_clear(args);
--
2.1.4
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html