submodule: add a print_config_from_gitmodules() helper

Add a new print_config_from_gitmodules() helper function to print values from .gitmodules just like "git config -f .gitmodules" would. This will be used by a new submodule--helper subcommand to be able to access the .gitmodules file in a more controlled way. Signed-off-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Antonio Ospite committed Oct 5, 2018 at 15:05 UTC bcbc780d143c4e8a9c6449f38b8c83d62da14906
2 files changed +26
submodule-config.c
+25
@@ -682,6 +682,31 @@ void submodule_free(struct repository *r)
682 submodule_cache_clear(r->submodule_cache);
683 }
684
685 +static int config_print_callback(const char *var, const char *value, void *cb_data)
686 +{
687 + char *wanted_key = cb_data;
688 +
689 + if (!strcmp(wanted_key, var))
690 + printf("%s\n", value);
691 +
692 + return 0;
693 +}
694 +
695 +int print_config_from_gitmodules(struct repository *repo, const char *key)
696 +{
697 + int ret;
698 + char *store_key;
699 +
700 + ret = git_config_parse_key(key, &store_key, NULL);
701 + if (ret < 0)
702 + return CONFIG_INVALID_KEY;
703 +
704 + config_from_gitmodules(config_print_callback, repo, store_key);
705 +
706 + free(store_key);
707 + return 0;
708 +}
709 +
710 struct fetch_config {
711 int *max_children;
712 int *recurse_submodules;
submodule-config.h
+1
@@ -48,6 +48,7 @@ const struct submodule *submodule_from_path(struct repository *r,
48 const struct object_id *commit_or_tree,
49 const char *path);
50 void submodule_free(struct repository *r);
51 +int print_config_from_gitmodules(struct repository *repo, const char *key);
52
53 /*
54 * Returns 0 if the name is syntactically acceptable as a submodule "name"