Re: [GSoC][PATCH 5/5 v3] submodule: port submodule subcommand 'sync' from shell to C
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 30, 2017, 23:19 UTC
- Message-ID
- <xmqq1sq1oygj.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20170630194727.29787-5-pc44800@gmail.com>
Prathamesh Chavan <pc44800@gmail.com> writes:
Show 24 quoted lines
> +static void sync_submodule(const struct cache_entry *list_item, void *cb_data)
> +{
> + struct sync_cb *info = cb_data;
> + const struct submodule *sub;
> + char *sub_key, *remote_key;
> + char *sub_origin_url, *super_config_url, *displaypath;
> + struct strbuf sb = STRBUF_INIT;
> + struct child_process cp = CHILD_PROCESS_INIT;
> +
> + if (!is_submodule_initialized(list_item->name))
> + return;
> +
> + sub = submodule_from_path(null_sha1, list_item->name);
> +
> + if (!sub || !sub->url)
> + die(_("no url found for submodule path '%s' in .gitmodules"),
> + list_item->name);
> +
> + if (starts_with_dot_dot_slash(sub->url) || starts_with_dot_slash(sub->url)) {
> + char *remote_url, *up_path;
> + char *remote = get_default_remote();
> + char *remote_key = xstrfmt("remote.%s.url", remote);
> + free(remote);
> +Have a blank line between the decls and the first statement (i.e. before "free(remote)"). The blank line after "free(remote)" may or may not be there.
Show 12 quoted lines
> + if (git_config_get_string(remote_key, &remote_url))
> + remote_url = xgetcwd();
> +...
> +
> + prepare_submodule_repo_env(&cp.env_array);
> + cp.git_cmd = 1;
> + cp.dir = list_item->name;
> + argv_array_pushl(&cp.args, "submodule--helper",
> + "print-default-remote", NULL);
> + if (capture_command(&cp, &sb, 0))
> + die(_("failed to get the default remote for submodule '%s'"),
> + list_item->name);OK. Perhaps in a distant future when the repository object abstraction is ready, we can do this within the main process, but for now, due to the presence of cp.dir, this is the best we can do.
Show 12 quoted lines
> + strbuf_strip_suffix(&sb, "\n");
> + remote_key = xstrfmt("remote.%s.url", sb.buf);
> + strbuf_release(&sb);
> +
> + child_process_init(&cp);
> + prepare_submodule_repo_env(&cp.env_array);
> + cp.git_cmd = 1;
> + cp.dir = list_item->name;
> + argv_array_pushl(&cp.args, "config", remote_key, sub_origin_url, NULL);
> + if (run_command(&cp))
> + die(_("failed to update remote for submodule '%s'"),
> + list_item->name);Likewise.
Looks like a fairly faithful conversion to me.
Thanks.