submodule-config: reuse config_from_gitmodules in repo_read_gitmodules

Reuse config_from_gitmodules in repo_read_gitmodules to remove some
duplication and also have a single point where the .gitmodules file is
read.

The change does not introduce any new behavior, the same gitmodules_cb
config callback is still used, which only deals with configuration
specific to submodules.

The check about the repo's worktree is removed from repo_read_gitmodules
because it's already performed in config_from_gitmodules.

The config_from_gitmodules function is moved up in the file —unchanged—
before its users to avoid a forward declaration.

Signed-off-by: Antonio Ospite <ao2@ao2.it>
Acked-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Antonio Ospite 2018-06-26 12:47:10 +02:00 committed by Junio C Hamano
parent 9a0fb3e772
commit db64d1127f

View File

@ -591,6 +591,23 @@ static void submodule_cache_check_init(struct repository *repo)
submodule_cache_init(repo->submodule_cache); submodule_cache_init(repo->submodule_cache);
} }
/*
* Note: This function is private for a reason, the '.gitmodules' file should
* not be used as as a mechanism to retrieve arbitrary configuration stored in
* the repository.
*
* Runs the provided config function on the '.gitmodules' file found in the
* working directory.
*/
static void config_from_gitmodules(config_fn_t fn, struct repository *repo, void *data)
{
if (repo->worktree) {
char *file = repo_worktree_path(repo, GITMODULES_FILE);
git_config_from_file(fn, file, data);
free(file);
}
}
static int gitmodules_cb(const char *var, const char *value, void *data) static int gitmodules_cb(const char *var, const char *value, void *data)
{ {
struct repository *repo = data; struct repository *repo = data;
@ -608,19 +625,11 @@ void repo_read_gitmodules(struct repository *repo)
{ {
submodule_cache_check_init(repo); submodule_cache_check_init(repo);
if (repo->worktree) {
char *gitmodules;
if (repo_read_index(repo) < 0) if (repo_read_index(repo) < 0)
return; return;
gitmodules = repo_worktree_path(repo, GITMODULES_FILE);
if (!is_gitmodules_unmerged(repo->index)) if (!is_gitmodules_unmerged(repo->index))
git_config_from_file(gitmodules_cb, gitmodules, repo); config_from_gitmodules(gitmodules_cb, repo, repo);
free(gitmodules);
}
repo->submodule_cache->gitmodules_read = 1; repo->submodule_cache->gitmodules_read = 1;
} }
@ -672,23 +681,6 @@ void submodule_free(struct repository *r)
submodule_cache_clear(r->submodule_cache); submodule_cache_clear(r->submodule_cache);
} }
/*
* Note: This function is private for a reason, the '.gitmodules' file should
* not be used as as a mechanism to retrieve arbitrary configuration stored in
* the repository.
*
* Runs the provided config function on the '.gitmodules' file found in the
* working directory.
*/
static void config_from_gitmodules(config_fn_t fn, struct repository *repo, void *data)
{
if (repo->worktree) {
char *file = repo_worktree_path(repo, GITMODULES_FILE);
git_config_from_file(fn, file, data);
free(file);
}
}
struct fetch_config { struct fetch_config {
int *max_children; int *max_children;
int *recurse_submodules; int *recurse_submodules;