]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule: refactor `submodule_to_gitdir()` to accept a repo
authorPatrick Steinhardt <ps@pks.im>
Fri, 7 Feb 2025 11:03:29 +0000 (12:03 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Feb 2025 17:59:21 +0000 (09:59 -0800)
The `submodule_to_gitdir()` function implicitly uses `the_repository` to
resolve submodule paths. Refactor the function to instead accept a repo
as parameter to remove the dependency on global state.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c
path.c
refs.c
submodule.c
submodule.h

index f9b970f8a64a54f198c56ef272b8f20b9999c59f..3a64f7e605e64e9704feebc3c4c46c60cdcbb7c1 100644 (file)
@@ -1301,7 +1301,7 @@ static void sync_submodule(const char *path, const char *prefix,
        remote_key = xstrfmt("remote.%s.url", default_remote);
        free(default_remote);
 
-       submodule_to_gitdir(&sb, path);
+       submodule_to_gitdir(the_repository, &sb, path);
        strbuf_addstr(&sb, "/config");
 
        if (git_config_set_in_file_gently(sb.buf, remote_key, NULL, sub_origin_url))
diff --git a/path.c b/path.c
index 499116dd1e0760b21658d97e69294eebaecc0ee4..a7fa42162e61e11407c143cfae23199e22121630 100644 (file)
--- a/path.c
+++ b/path.c
@@ -567,7 +567,7 @@ static int do_submodule_path(struct strbuf *buf, const char *path,
        struct strbuf git_submodule_dir = STRBUF_INIT;
        int ret;
 
-       ret = submodule_to_gitdir(&git_submodule_dir, path);
+       ret = submodule_to_gitdir(the_repository, &git_submodule_dir, path);
        if (ret)
                goto cleanup;
 
diff --git a/refs.c b/refs.c
index daf6a842050a1630a6a5a21459263848a3f38732..e1293e53aaa93063aade2fdc561bf1a041da8971 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -2146,7 +2146,7 @@ struct ref_store *repo_get_submodule_ref_store(struct repository *repo,
        if (!is_nonbare_repository_dir(&submodule_sb))
                goto done;
 
-       if (submodule_to_gitdir(&submodule_sb, submodule))
+       if (submodule_to_gitdir(repo, &submodule_sb, submodule))
                goto done;
 
        subrepo = xmalloc(sizeof(*subrepo));
index 211ead54a0f8ae2717ce0856fbeb59697ca7146b..0530e8cf24e04540212c558c8332d093536f1b68 100644 (file)
@@ -536,7 +536,8 @@ static struct repository *open_submodule(const char *path)
        struct strbuf sb = STRBUF_INIT;
        struct repository *out = xmalloc(sizeof(*out));
 
-       if (submodule_to_gitdir(&sb, path) || repo_init(out, sb.buf, NULL)) {
+       if (submodule_to_gitdir(the_repository, &sb, path) ||
+           repo_init(out, sb.buf, NULL)) {
                strbuf_release(&sb);
                free(out);
                return NULL;
@@ -2572,7 +2573,8 @@ int get_superproject_working_tree(struct strbuf *buf)
  * Put the gitdir for a submodule (given relative to the main
  * repository worktree) into `buf`, or return -1 on error.
  */
-int submodule_to_gitdir(struct strbuf *buf, const char *submodule)
+int submodule_to_gitdir(struct repository *repo,
+                       struct strbuf *buf, const char *submodule)
 {
        const struct submodule *sub;
        const char *git_dir;
@@ -2592,14 +2594,13 @@ int submodule_to_gitdir(struct strbuf *buf, const char *submodule)
                strbuf_addstr(buf, git_dir);
        }
        if (!is_git_directory(buf->buf)) {
-               sub = submodule_from_path(the_repository, null_oid(),
-                                         submodule);
+               sub = submodule_from_path(repo, null_oid(), submodule);
                if (!sub) {
                        ret = -1;
                        goto cleanup;
                }
                strbuf_reset(buf);
-               submodule_name_to_gitdir(buf, the_repository, sub->name);
+               submodule_name_to_gitdir(buf, repo, sub->name);
        }
 
 cleanup:
index 4deb1b5f84e71efddfa7c7f6cc95b3e61f9323e2..db980c1d083bc0e4c3bd3c94eb3bf19ae4d711ff 100644 (file)
@@ -136,7 +136,8 @@ int push_unpushed_submodules(struct repository *r,
  * path of that submodule in 'buf'. Return -1 on error or when the
  * submodule is not initialized.
  */
-int submodule_to_gitdir(struct strbuf *buf, const char *submodule);
+int submodule_to_gitdir(struct repository *repo,
+                       struct strbuf *buf, const char *submodule);
 
 /*
  * Given a submodule name, create a path to where the submodule's gitdir lives