submodule.c & submodule--helper: pass along "super_prefix" param
Start passing the "super_prefix" along as a parameter to
get_submodule_displaypath() and absorb_git_dir_into_superproject(),
rather than get the value directly as a global.
This is in preparation for subsequent commits, where we'll gradually
phase out get_super_prefix() for an alternative way of getting the
"super_prefix".
Most of the users of this get a get_super_prefix() value, either
directly or by indirection. The exceptions are:
- builtin/rm.c: Doesn't declare SUPPORT_SUPER_PREFIX, so we'd have
died if this was provided, so it's safe to pass "NULL".
- deinit_submodule(): The "deinit_submodule()" function has never been
able to use the "git -super-prefix". It will call
"absorb_git_dir_into_superproject()", but it will only do so from the
top-level project.
If "absorbgitdirs" recurses will use the "path" passed to
"absorb_git_dir_into_superproject()" in "deinit_submodule()" as its
starting "--super-prefix". So we can safely remove the
get_super_prefix() call here, and pass NULL instead.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Ævar Arnfjörð Bjarmason committedDec 20, 2022 at 13:39 UTCf0a5e5ad57ae729d9971bdb6bdaa82c1d85bd062
4 files changed+34-21
builtin/rm.c
+1-1
index d4989d4d86..4a4aec0d00 100644--- a/builtin/rm.c+++ b/builtin/rm.c@@ -86,7 +86,7 @@ static void submodules_absorb_gitdir_if_needed(void) continue; if (!submodule_uses_gitfile(name))- absorb_git_dir_into_superproject(name);+ absorb_git_dir_into_superproject(name, NULL); } }
index 8ac2fca855..bf19598b8c 100644--- a/submodule.c+++ b/submodule.c@@ -2145,7 +2145,8 @@ int submodule_move_head(const char *path, if (!(flags & SUBMODULE_MOVE_HEAD_DRY_RUN)) { if (old_head) { if (!submodule_uses_gitfile(path))- absorb_git_dir_into_superproject(path);+ absorb_git_dir_into_superproject(path,+ get_super_prefix()); } else { struct strbuf gitdir = STRBUF_INIT; submodule_name_to_gitdir(&gitdir, the_repository,@@ -2315,7 +2316,8 @@ static void relocate_single_git_dir_into_superproject(const char *path) strbuf_release(&new_gitdir); }-static void absorb_git_dir_into_superproject_recurse(const char *path)+static void absorb_git_dir_into_superproject_recurse(const char *path,+ const char *super_prefix) { struct child_process cp = CHILD_PROCESS_INIT;@@ -2323,8 +2325,8 @@ static void absorb_git_dir_into_superproject_recurse(const char *path) cp.dir = path; cp.git_cmd = 1; cp.no_stdin = 1;- strvec_pushf(&cp.args, "--super-prefix=%s%s/",- get_super_prefix_or_empty(), path);+ strvec_pushf(&cp.args, "--super-prefix=%s%s/", super_prefix ?+ super_prefix : "", path); strvec_pushl(&cp.args, "submodule--helper", "absorbgitdirs", NULL); prepare_submodule_repo_env(&cp.env);@@ -2337,7 +2339,8 @@ static void absorb_git_dir_into_superproject_recurse(const char *path) * having its git directory within the working tree to the git dir nested * in its superprojects git dir under modules/. */-void absorb_git_dir_into_superproject(const char *path)+void absorb_git_dir_into_superproject(const char *path,+ const char *super_prefix) { int err_code; const char *sub_git_dir;@@ -2386,7 +2389,7 @@ void absorb_git_dir_into_superproject(const char *path) } strbuf_release(&gitdir);- absorb_git_dir_into_superproject_recurse(path);+ absorb_git_dir_into_superproject_recurse(path, super_prefix); } int get_superproject_working_tree(struct strbuf *buf)
submodule.h
+2-1
index b52a4ff1e7..f90ee547d0 100644--- a/submodule.h+++ b/submodule.h@@ -164,7 +164,8 @@ void submodule_unset_core_worktree(const struct submodule *sub); */ void prepare_submodule_repo_env(struct strvec *env);-void absorb_git_dir_into_superproject(const char *path);+void absorb_git_dir_into_superproject(const char *path,+ const char *super_prefix); /* * Return the absolute path of the working tree of the superproject, which this