From: Jonathan Nieder <jrnieder@gmail.com>
To: Stefan Beller <sbeller@google.com>
Cc: gitster@pobox.com, git@vger.kernel.org, Jens.Lehmann@web.de
Subject: Re: [PATCHv9 4/6] git submodule update: have a dedicated helper for cloning
Date: Tue, 9 Feb 2016 16:37:41 -0800 [thread overview]
Message-ID: <20160210003741.GJ28749@google.com> (raw)
In-Reply-To: <1455051274-15256-5-git-send-email-sbeller@google.com>
Stefan Beller wrote:
> This introduces a new helper function in git submodule--helper
> which takes care of cloning all submodules, which we want to
> parallelize eventually.
Neat.
[...]
> As we can only access the stderr channel from within the parallel
> processing engine, we need to reroute the error message for
> specified but initialized submodules to stderr. As it is an error
> message, this should have gone to stderr in the first place, so it
> is a bug fix along the way.
In principle this could have happened in a separate preparatory patch
(so that the move to C would have no functional effect) but I don't
think that benefit alone is worth the churn of going back and doing
that.
[...]
> +++ b/builtin/submodule--helper.c
> @@ -255,6 +255,235 @@ static int module_clone(int argc, const char **argv, const char *prefix)
> return 0;
> }
>
> +static int git_submodule_config(const char *var, const char *value, void *cb)
> +{
> + return submodule_config(var, value, cb);
> +}
Can callers use submodule_config directly?
> +struct submodule_update_clone {
> + /* states */
> + int count;
> + int print_unmatched;
I'd add a blank line here.
> + /* configuration */
> + int quiet;
> + const char *reference;
> + const char *depth;
> + const char *update;
> + const char *recursive_prefix;
> + const char *prefix;
> + struct module_list list;
> + struct string_list projectlines;
> + struct pathspec pathspec;
> +};
> +#define SUBMODULE_UPDATE_CLONE_INIT {0, 0, 0, NULL, NULL, NULL, NULL, NULL, MODULE_LIST_INIT, STRING_LIST_INIT_DUP}
What is this struct used for? Maybe this would be clearer if it
appeared immediately before the function that used it.
This is the shared cb object passed to run_processes_parallel, right?
Some name like parallel_clone_opts or parallel_clone_cb might work.
What do the fields represent? E.g., what is count a count of, what
does it mean when print_unmatched is true, etc?
Would it make sense to put the options in a separate struct from the
state fields (so e.g. it could be const)? The options are easier to
understand because they correspond to command-line options, while the
state fields are something different and internal.
[...]
> +static int update_clone_get_next_task(struct child_process *cp,
> + struct strbuf *err,
> + void *pp_cb,
> + void **pp_task_cb)
> +{
> + struct submodule_update_clone *pp = pp_cb;
> +
> + for (; pp->count < pp->list.nr; pp->count++) {
Could some of this loop body be factored out into separate functions?
(e.g. whether to skip a submodule, getting the display path, ...).
[...]
> + /*
> + * Looking up the url in .git/config.
> + * We must not fall back to .gitmodules as we only want
> + * to process configured submodules.
> + */
> + strbuf_reset(&sb);
> + strbuf_addf(&sb, "submodule.%s.url", sub->name);
> + git_config_get_string(sb.buf, &url);
> + if (!url) {
I can see how the submodule API would be overkill for this. But it's
still tempting to use it. 'struct submodule' could gain a field
representing whether the submodule is initialized (i.e., whether it
appears in .git/config).
I wonder whether the strbuf_reset + addf idiom would be a good thing
to factor out into a mkpath()-like function --- i.e., something like
git_config_get_string(fmt(&sb, "submodule.%s.url", sub->name), &url);
That's a little less risky than mkpath was because it explicitly
mentions &sb but maybe it's too magical.
[...]
> +static int update_clone_start_failure(struct child_process *cp,
Will review the rest when I get home.
Thanks,
Jonathan
next prev parent reply other threads:[~2016-02-10 0:37 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-09 20:54 [PATCHv9 0/6] Expose submodule parallelism to the user Stefan Beller
2016-02-09 20:54 ` [PATCHv9 1/6] submodule-config: keep update strategy around Stefan Beller
2016-02-09 21:08 ` Junio C Hamano
2016-02-09 22:19 ` Stefan Beller
2016-02-09 22:29 ` Junio C Hamano
2016-02-09 21:49 ` Jonathan Nieder
2016-02-09 22:32 ` Junio C Hamano
2016-02-11 20:00 ` Junio C Hamano
2016-02-09 20:54 ` [PATCHv9 2/6] submodule-config: drop check against NULL Stefan Beller
2016-02-09 21:50 ` Jonathan Nieder
2016-02-09 20:54 ` [PATCHv9 3/6] fetching submodules: respect `submodule.fetchJobs` config option Stefan Beller
2016-02-09 21:12 ` Junio C Hamano
2016-02-09 22:34 ` Jonathan Nieder
2016-02-10 0:11 ` Stefan Beller
2016-02-10 1:12 ` Junio C Hamano
2016-02-10 2:04 ` Junio C Hamano
2016-02-09 20:54 ` [PATCHv9 4/6] git submodule update: have a dedicated helper for cloning Stefan Beller
2016-02-09 21:24 ` Junio C Hamano
2016-02-10 0:37 ` Jonathan Nieder [this message]
2016-02-10 2:26 ` Jacob Keller
2016-02-10 17:49 ` Stefan Beller
2016-02-11 7:46 ` Jacob Keller
2016-02-09 20:54 ` [PATCHv9 5/6] submodule update: expose parallelism to the user Stefan Beller
2016-02-09 20:54 ` [PATCHv9 6/6] clone: allow an explicit argument for parallel submodule clones Stefan Beller
2016-02-09 21:39 ` [PATCHv9 0/6] Expose submodule parallelism to the user Junio C Hamano
2016-02-09 21:46 ` Stefan Beller
2016-02-09 22:03 ` Junio C Hamano
2016-02-11 20:23 ` Junio C Hamano
2016-02-11 20:28 ` Junio C Hamano
2016-02-11 20:33 ` Stefan Beller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160210003741.GJ28749@google.com \
--to=jrnieder@gmail.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).