summaryrefslogtreecommitdiff
path: root/submodule-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'submodule-config.c')
-rw-r--r--submodule-config.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/submodule-config.c b/submodule-config.c
index 85064810b2..bd5e14ab20 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -674,10 +674,13 @@ static int gitmodules_cb(const char *var, const char *value, void *data)
return parse_config(var, value, &parameter);
}
-void repo_read_gitmodules(struct repository *repo)
+void repo_read_gitmodules(struct repository *repo, int skip_if_read)
{
submodule_cache_check_init(repo);
+ if (repo->submodule_cache->gitmodules_read && skip_if_read)
+ return;
+
if (repo_read_index(repo) < 0)
return;
@@ -703,20 +706,11 @@ void gitmodules_config_oid(const struct object_id *commit_oid)
the_repository->submodule_cache->gitmodules_read = 1;
}
-static void gitmodules_read_check(struct repository *repo)
-{
- submodule_cache_check_init(repo);
-
- /* read the repo's .gitmodules file if it hasn't been already */
- if (!repo->submodule_cache->gitmodules_read)
- repo_read_gitmodules(repo);
-}
-
const struct submodule *submodule_from_name(struct repository *r,
const struct object_id *treeish_name,
const char *name)
{
- gitmodules_read_check(r);
+ repo_read_gitmodules(r, 1);
return config_from(r->submodule_cache, treeish_name, name, lookup_name);
}
@@ -724,7 +718,7 @@ const struct submodule *submodule_from_path(struct repository *r,
const struct object_id *treeish_name,
const char *path)
{
- gitmodules_read_check(r);
+ repo_read_gitmodules(r, 1);
return config_from(r->submodule_cache, treeish_name, path, lookup_path);
}