git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 6/7] submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree

From
Stefan Beller <sbeller@google.com>
Date
Aug 3, 2018, 22:23 UTC
Message-ID
<20180803222322.261813-7-sbeller@google.com>
In-Reply-To
<20180803222322.261813-1-sbeller@google.com>

e98317508c0 (submodule: ensure core.worktree is set after update, 2018-06-18) was overly aggressive in calling connect_work_tree_and_git_dir as that ensures both the 'core.worktree' configuration is set as well as setting up correct gitlink file pointing at the git directory.

We do not need to check for the gitlink in this part of the cmd_update in git-submodule.sh, as the initial call to update-clone will have ensured that. So we can reduce the work to only (check and potentially) set the 'core.worktree' setting.

While at it move the check from shell to C as that proves to be useful in a follow up patch, as we do not need the 'name' in shell now.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 builtin/submodule--helper.c | 64 +++++++++++++++++++++++--------------
 git-submodule.sh            |  7 ++--
 2 files changed, 42 insertions(+), 29 deletions(-)
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index 8b1088ab58a..e7635d5d9ab 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -1964,6 +1964,45 @@ static int push_check(int argc, const char **argv, const char *prefix)
 	return 0;
 }
 
+static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
+{
+	const struct submodule *sub;
+	const char *path;
+	char *cw;
+	struct repository subrepo;
+
+	if (argc != 2)
+		BUG("submodule--helper connect-gitdir-workingtree <name> <path>");
+
+	path = argv[1];
+
+	sub = submodule_from_path(the_repository, &null_oid, path);
+	if (!sub)
+		BUG("We could get the submodule handle before?");
+
+	if (repo_submodule_init(&subrepo, the_repository, path))
+		die(_("could not get a repository handle for submodule '%s'"), path);
+
+	if (!repo_config_get_string(&subrepo, "core.worktree", &cw)) {
+		char *cfg_file, *abs_path;
+		const char *rel_path;
+		struct strbuf sb = STRBUF_INIT;
+
+		cfg_file = xstrfmt("%s/config", subrepo.gitdir);
+
+		abs_path = absolute_pathdup(path);
+		rel_path = relative_path(abs_path, subrepo.gitdir, &sb);
+
+		git_config_set_in_file(cfg_file, "core.worktree", rel_path);
+
+		free(cfg_file);
+		free(abs_path);
+		strbuf_release(&sb);
+	}
+
+	return 0;
+}
+
 static int absorb_git_dirs(int argc, const char **argv, const char *prefix)
 {
 	int i;
@@ -2029,29 +2068,6 @@ static int check_name(int argc, const char **argv, const char *prefix)
 	return 0;
 }
 
-static int connect_gitdir_workingtree(int argc, const char **argv, const char *prefix)
-{
-	struct strbuf sb = STRBUF_INIT;
-	const char *name, *path;
-	char *sm_gitdir;
-
-	if (argc != 3)
-		BUG("submodule--helper connect-gitdir-workingtree <name> <path>");
-
-	name = argv[1];
-	path = argv[2];
-
-	strbuf_addf(&sb, "%s/modules/%s", get_git_dir(), name);
-	sm_gitdir = absolute_pathdup(sb.buf);
-
-	connect_work_tree_and_git_dir(path, sm_gitdir, 0);
-
-	strbuf_release(&sb);
-	free(sm_gitdir);
-
-	return 0;
-}
-
 #define SUPPORT_SUPER_PREFIX (1<<0)
 
 struct cmd_struct {
@@ -2065,7 +2081,7 @@ static struct cmd_struct commands[] = {
 	{"name", module_name, 0},
 	{"clone", module_clone, 0},
 	{"update-clone", update_clone, 0},
-	{"connect-gitdir-workingtree", connect_gitdir_workingtree, 0},
+	{"ensure-core-worktree", ensure_core_worktree, 0},
 	{"relative-path", resolve_relative_path, 0},
 	{"resolve-relative-url", resolve_relative_url, 0},
 	{"resolve-relative-url-test", resolve_relative_url_test, 0},
diff --git a/git-submodule.sh b/git-submodule.sh
index 8caaf274e25..19d010eac06 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -535,6 +535,8 @@ cmd_update()
 	do
 		die_if_unmatched "$quickabort" "$sha1"
 
+		git submodule--helper ensure-core-worktree "$sm_path"
+
 		name=$(git submodule--helper name "$sm_path") || exit
 		if ! test -z "$update"
 		then
@@ -577,11 +579,6 @@ cmd_update()
 			die "$(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
 		fi
 
-		if ! $(git config -f "$(git rev-parse --git-common-dir)/modules/$name/config" core.worktree) 2>/dev/null
-		then
-			git submodule--helper connect-gitdir-workingtree "$name" "$sm_path"
-		fi
-
 		if test "$subsha1" != "$sha1" || test -n "$force"
 		then
 			subforce=$force
-- 
2.18.0.132.g195c49a2227
Previous: Stefan BellerNext: Brandon Williams
Message 7 of 24 in “Resend of sb/submodule-update-in-c”
  1. 0/7 Resend of sb/submodule-update-in-cStefan Beller, Aug 3, 2018
  2. 2/7 git-submodule.sh: rename unused variablesStefan Beller, Aug 3, 2018
  3. 1/7 git-submodule.sh: align error reporting for update mode to use pathStefan Beller, Aug 3, 2018
  4. 3/7 builtin/submodule--helper: factor out submodule updatingStefan Beller, Aug 3, 2018
  5. 4/7 builtin/submodule--helper: store update_clone information in a structStefan Beller, Aug 3, 2018
  6. 5/7 builtin/submodule--helper: factor out method to update a single submoduleStefan Beller, Aug 3, 2018
  7. 6/7 submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktreeStefan Beller, Aug 3, 2018
  8. Brandon WilliamsAug 10, 2018
  9. Stefan BellerAug 10, 2018
  10. Brandon WilliamsAug 10, 2018
  11. 7/7 submodule--helper: introduce new update-module-mode helperStefan Beller, Aug 3, 2018
  12. Junio C HamanoAug 3, 2018
  13. 0/7 Resend of sb/submodule-update-in-cStefan Beller, Aug 13, 2018
  14. 1/7 git-submodule.sh: align error reporting for update mode to use pathStefan Beller, Aug 13, 2018
  15. 2/7 git-submodule.sh: rename unused variablesStefan Beller, Aug 13, 2018
  16. 3/7 builtin/submodule--helper: factor out submodule updatingStefan Beller, Aug 13, 2018
  17. 4/7 builtin/submodule--helper: store update_clone information in a structStefan Beller, Aug 13, 2018
  18. 5/7 builtin/submodule--helper: factor out method to update a single submoduleStefan Beller, Aug 13, 2018
  19. 6/7 submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktreeStefan Beller, Aug 13, 2018
  20. 7/7 submodule--helper: introduce new update-module-mode helperStefan Beller, Aug 13, 2018
  21. Duy NguyenAug 18, 2018
  22. Stefan BellerAug 20, 2018
  23. Junio C HamanoAug 14, 2018
  24. Stefan BellerAug 14, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.