On Tue, Aug 4, 2015 at 8:04 PM, Stefan Beller <[email protected]> wrote:
> The goal of this series being rewriting `git submodule update`,
> we don't want to call out to the shell script for config lookups.
>
> So reimplement the lookup of the submodule name in C.
>
> Signed-off-by: Stefan Beller <[email protected]>
> ---
> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
> index cb18ddf..dd5635f 100644
> --- a/builtin/submodule--helper.c
> +++ b/builtin/submodule--helper.c
> @@ -98,6 +100,48 @@ static int module_list(int argc, const char **argv, const
> char *prefix)
> +static int collect_module_names(const char *key, const char *value, void *cb)
> +{
> + size_t len;
> + struct string_list *sl = cb;
> +
> + if (starts_with(key, "submodule.")
> + && strip_suffix(key, ".path", &len)) {
> + struct strbuf sb = STRBUF_INIT;
> + strbuf_add(&sb, key + strlen("submodule."),
> + len - strlen("submodule."));
> + string_list_insert(sl, value)->util = strbuf_detach(&sb,
> NULL);
> + strbuf_release(&sb);
Why the complexity and overhead of a strbuf when the same could be
accomplished more easily and straightforwardly with xstrndup()?
> + }
> +
> + return 0;
> +}
> +
> +static int module_name(int argc, const char **argv, const char *prefix)
> +{
> + struct string_list_item *item;
> + struct git_config_source config_source;
> + struct string_list values = STRING_LIST_INIT_DUP;
> +
> + if (!argc)
Do you mean?
if (argc != 1)
> + usage("git submodule--helper module_name <path>\n");
> +
> + memset(&config_source, 0, sizeof(config_source));
> + config_source.file = ".gitmodules";
> +
> + if (git_config_with_options(collect_module_names, &values,
> + &config_source, 1) < 0)
> + die(_("unknown error occured while reading the git modules
> file"));
> +
> + item = string_list_lookup(&values, argv[0]);
> + if (item)
> + printf("%s\n", (char*)item->util);
> + else
> + die("No submodule mapping found in .gitmodules for path
> '%s'", argv[0]);
> + return 0;
> +}
> +
> int cmd_submodule__helper(int argc, const char **argv, const char *prefix)
> {
> if (argc < 2)
> @@ -106,6 +150,9 @@ int cmd_submodule__helper(int argc, const char **argv,
> const char *prefix)
> if (!strcmp(argv[1], "module_list"))
> return module_list(argc - 1, argv + 1, prefix);
>
> + if (!strcmp(argv[1], "module_name"))
> + return module_name(argc - 2, argv + 2, prefix);
> +
> usage:
> usage("git submodule--helper module_list\n");
> }
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html