On Tue, Aug 4, 2015 at 5:58 PM, Eric Sunshine <[email protected]> wrote:
> 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()?
fixed.
>
>> + }
>> +
>> + 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)
doh! Yes I meant that.
>
>> + 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