Revert "Merge branch 'sb/submodule-core-worktree'"

This reverts commit 7e25437d35a70791b345872af202eabfb3e1a8bc, reversing changes made to 00624d608cc69bd62801c93e74d1ea7a7ddd6598. v2.19.0-rc0~165^2~1 (submodule: ensure core.worktree is set after update, 2018-06-18) assumes an "absorbed" submodule layout, where the submodule's Git directory is in the superproject's .git/modules/ directory and .git in the submodule worktree is a .git file pointing there. In particular, it uses $GIT_DIR/modules/$name to find the submodule to find out whether it already has core.worktree set, and it uses connect_work_tree_and_git_dir if not, resulting in fatal: could not open sub/.git for writing The context behind that patch: v2.19.0-rc0~165^2~2 (submodule: unset core.worktree if no working tree is present, 2018-06-12) unsets core.worktree when running commands like "git checkout --recurse-submodules" to switch to a branch without the submodule. If a user then uses "git checkout --no-recurse-submodules" to switch back to a branch with the submodule and runs "git submodule update", this patch is needed to ensure that commands using the submodule directly are aware of the path to the worktree. It is late in the release cycle, so revert the whole 3-patch series. We can try again later for 2.20. Reported-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Helped-by: Stefan Beller <sbeller@google.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Sep 7, 2018 at 17:09 UTC f178c13fdac42763a7aa58bf260aa67d9f4393ec
6 files changed +2 -55
builtin/submodule--helper.c
-26
@@ -1123,8 +1123,6 @@ static void deinit_submodule(const char *path, const char *prefix,
1123 if (!(flags & OPT_QUIET))
1124 printf(format, displaypath);
1125
1126 - submodule_unset_core_worktree(sub);
1127 -
1126 strbuf_release(&sb_rm);
1127 }
1128
@@ -2005,29 +2003,6 @@ static int check_name(int argc, const char **argv, const char *prefix)
2003 return 0;
2004 }
2005
2008 -static int connect_gitdir_workingtree(int argc, const char **argv, const char *prefix)
2009 -{
2010 - struct strbuf sb = STRBUF_INIT;
2011 - const char *name, *path;
2012 - char *sm_gitdir;
2013 -
2014 - if (argc != 3)
2015 - BUG("submodule--helper connect-gitdir-workingtree <name> <path>");
2016 -
2017 - name = argv[1];
2018 - path = argv[2];
2019 -
2020 - strbuf_addf(&sb, "%s/modules/%s", get_git_dir(), name);
2021 - sm_gitdir = absolute_pathdup(sb.buf);
2022 -
2023 - connect_work_tree_and_git_dir(path, sm_gitdir, 0);
2024 -
2025 - strbuf_release(&sb);
2026 - free(sm_gitdir);
2027 -
2028 - return 0;
2029 -}
2030 -
2006 #define SUPPORT_SUPER_PREFIX (1<<0)
2007
2008 struct cmd_struct {
@@ -2041,7 +2016,6 @@ static struct cmd_struct commands[] = {
2016 {"name", module_name, 0},
2017 {"clone", module_clone, 0},
2018 {"update-clone", update_clone, 0},
2044 - {"connect-gitdir-workingtree", connect_gitdir_workingtree, 0},
2019 {"relative-path", resolve_relative_path, 0},
2020 {"resolve-relative-url", resolve_relative_url, 0},
2021 {"resolve-relative-url-test", resolve_relative_url_test, 0},
git-submodule.sh
-5
@@ -580,11 +580,6 @@ cmd_update()
580 die "$(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
581 fi
582
583 - if ! $(git config -f "$(git rev-parse --git-common-dir)/modules/$name/config" core.worktree) 2>/dev/null
584 - then
585 - git submodule--helper connect-gitdir-workingtree "$name" "$sm_path"
586 - fi
587 -
583 if test "$subsha1" != "$sha1" || test -n "$force"
584 then
585 subforce=$force
submodule.c
-14
@@ -1534,18 +1534,6 @@ out:
1534 return ret;
1535 }
1536
1537 -void submodule_unset_core_worktree(const struct submodule *sub)
1538 -{
1539 - char *config_path = xstrfmt("%s/modules/%s/config",
1540 - get_git_common_dir(), sub->name);
1541 -
1542 - if (git_config_set_in_file_gently(config_path, "core.worktree", NULL))
1543 - warning(_("Could not unset core.worktree setting in submodule '%s'"),
1544 - sub->path);
1545 -
1546 - free(config_path);
1547 -}
1548 -
1537 static const char *get_super_prefix_or_empty(void)
1538 {
1539 const char *s = get_super_prefix();
@@ -1711,8 +1699,6 @@ int submodule_move_head(const char *path,
1699
1700 if (is_empty_dir(path))
1701 rmdir_or_warn(path);
1714 -
1715 - submodule_unset_core_worktree(sub);
1702 }
1703 }
1704 out:
submodule.h
-2
@@ -127,8 +127,6 @@ int submodule_move_head(const char *path,
127 const char *new_head,
128 unsigned flags);
129
130 -void submodule_unset_core_worktree(const struct submodule *sub);
131 -
130 /*
131 * Prepare the "env_array" parameter of a "struct child_process" for executing
132 * a submodule by clearing any repo-specific environment variables, but
t/lib-submodule-update.sh
+2 -3
@@ -235,7 +235,7 @@ reset_work_tree_to_interested () {
235 then
236 mkdir -p submodule_update/.git/modules/sub1/modules &&
237 cp -r submodule_update_repo/.git/modules/sub1/modules/sub2 submodule_update/.git/modules/sub1/modules/sub2
238 - # core.worktree is unset for sub2 as it is not checked out
238 + GIT_WORK_TREE=. git -C submodule_update/.git/modules/sub1/modules/sub2 config --unset core.worktree
239 fi &&
240 # indicate we are interested in the submodule:
241 git -C submodule_update config submodule.sub1.url "bogus" &&
@@ -709,8 +709,7 @@ test_submodule_recursing_with_args_common() {
709 git branch -t remove_sub1 origin/remove_sub1 &&
710 $command remove_sub1 &&
711 test_superproject_content origin/remove_sub1 &&
712 - ! test -e sub1 &&
713 - test_must_fail git config -f .git/modules/sub1/config core.worktree
712 + ! test -e sub1
713 )
714 '
715 # ... absorbing a .git directory along the way.
t/t7400-submodule-basic.sh
-5
@@ -984,11 +984,6 @@ test_expect_success 'submodule deinit should remove the whole submodule section
984 rmdir init
985 '
986
987 -test_expect_success 'submodule deinit should unset core.worktree' '
988 - test_path_is_file .git/modules/example/config &&
989 - test_must_fail git config -f .git/modules/example/config core.worktree
990 -'
991 -
987 test_expect_success 'submodule deinit from subdirectory' '
988 git submodule update --init &&
989 git config submodule.example.foo bar &&