Re: [PATCH v2 06/19] pull: pass verbosity, --progress flags to fetch and merge

2015-06-09 Thread Junio C Hamano
Paul Tan pyoka...@gmail.com writes:

 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.

Forgot to rephrase?  parse-opt-passthru() is a good name for pass
the single string, last one wins, but is implemented in another
patch.

Use parse_opt_passthru() implemented earlier to pass the
--[no-]progress command line options to git-fetch and
git-merge.

or something like that.

 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()
  };

Seeing this use case convinces me that the new parse-opt callback
parse-opt-pass-single-string-last-one-wins() in 01/19 should not be
strbuf based interface but should be (const char *) based one.

Other than that the change looks nicely done.  So far, the series
has been a very pleasant read up to this step.
--
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


[PATCH v2 06/19] pull: pass verbosity, --progress flags to fetch and merge

2015-06-03 Thread Paul Tan
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