The entire submodule section in the superproject will be per-worktree and written to $GIT_DIR/config.worktree. The behavior when you only have one worktree (and not enabled extensions.worktreeConfig) is the same as before, everything is still written in $GIT_DIR/config Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/submodule--helper.c | 14 +++++--------- t/t2405-worktree-submodules.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 7b328ec060..6b749b41fb 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -639,15 +639,11 @@ static void init_submodule(const char *path, const char *prefix, die(_("No url found for submodule path '%s' in .gitmodules"), displaypath); - /* - * NEEDSWORK: In a multi-working-tree world, this needs to be - * set in the per-worktree config. - * - * Set active flag for the submodule being initialized - */ + check_multi_worktree_support(); + if (!is_submodule_active(the_repository, path)) { strbuf_addf(&sb, "submodule.%s.active", sub->name); - git_config_set_gently(sb.buf, "true"); + repo_config_set_worktree_gently(the_repository, sb.buf, "true"); strbuf_reset(&sb); } @@ -672,7 +668,7 @@ static void init_submodule(const char *path, const char *prefix, free(oldurl); } - if (git_config_set_gently(sb.buf, url)) + if (repo_config_set_worktree_gently(the_repository, sb.buf, url)) die(_("Failed to register url for submodule path '%s'"), displaypath); if (!(flags & OPT_QUIET)) @@ -693,7 +689,7 @@ static void init_submodule(const char *path, const char *prefix, } else upd = xstrdup(submodule_strategy_to_string(&sub->update_strategy)); - if (git_config_set_gently(sb.buf, upd)) + if (repo_config_set_worktree_gently(the_repository, sb.buf, upd)) die(_("Failed to register update mode for submodule path '%s'"), displaypath); } strbuf_release(&sb); diff --git a/t/t2405-worktree-submodules.sh b/t/t2405-worktree-submodules.sh index 3ee5380e88..2ee3e2d039 100755 --- a/t/t2405-worktree-submodules.sh +++ b/t/t2405-worktree-submodules.sh @@ -39,4 +39,32 @@ test_expect_success 'add submodules' ' test -d .git/worktrees/secondary/modules/sub2 ' +test_expect_success 'init submodules' ' + git clone --no-local .git cloned && + ( + cd cloned && + git config extensions.worktreeConfig true && + git submodule init sub1 && + git worktree add secondary origin/secondary && + cd secondary && + git submodule init sub2 + ) && + + git -C cloned config --get-regexp "submodule.*" | sort >actual1 && + cat >expected1 <<-EOF && + submodule.sub1.active true + submodule.sub1.url $(pwd)/submodsrc + EOF + test_cmp expected1 actual1 && + ! test -d cloned/.git/modules/sub1 && + + git -C cloned/secondary config --get-regexp "submodule.*" | sort >actual2 && + cat >expected2 <<-EOF && + submodule.sub2.active true + submodule.sub2.url $(pwd)/submodsrc + EOF + test_cmp expected2 actual2 && + ! test -d cloned/.git/worktrees/secondary/modules/sub2 +' + test_done -- 2.20.0.482.g66447595a7