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

[PATCH 2/6] worktree.c: add get_worktree_config()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Dec 27, 2018, 15:56 UTC
Message-ID
<20181227155611.10585-3-pclouds@gmail.com>
In-Reply-To
<20181227155611.10585-1-pclouds@gmail.com>

"git config --worktree" can write to the write file whether extensions.worktreeConfig is enabled or not. In order to do the same using config API, we need to determine the right file to write to. Add this function for that purpose. This is the basis for the coming repo_config_set_worktree()

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/config.c |  9 ++-------
 worktree.c       | 16 ++++++++++++++++
 worktree.h       |  7 +++++++
 3 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/builtin/config.c b/builtin/config.c
index 84385ef165..771cfa54bd 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -650,18 +650,13 @@ int cmd_config(int argc, const char **argv, const char *prefix)
 	else if (use_local_config)
 		given_config_source.file = git_pathdup("config");
 	else if (use_worktree_config) {
-		struct worktree **worktrees = get_worktrees(0);
-		if (repository_format_worktree_config)
-			given_config_source.file = git_pathdup("config.worktree");
-		else if (worktrees[0] && worktrees[1])
+		given_config_source.file = get_worktree_config(the_repository);
+		if (!given_config_source.file)
 			die(_("--worktree cannot be used with multiple "
 			      "working trees unless the config\n"
 			      "extension worktreeConfig is enabled. "
 			      "Please read \"CONFIGURATION FILE\"\n"
 			      "section in \"git help worktree\" for details"));
-		else
-			given_config_source.file = git_pathdup("config");
-		free_worktrees(worktrees);
 	} else if (given_config_source.file) {
 		if (!is_absolute_path(given_config_source.file) && prefix)
 			given_config_source.file =
diff --git a/worktree.c b/worktree.c
index d6a0ee7f73..d335bdf28a 100644
--- a/worktree.c
+++ b/worktree.c
@@ -581,3 +581,19 @@ int other_head_refs(each_ref_fn fn, void *cb_data)
 	free_worktrees(worktrees);
 	return ret;
 }
+
+char *get_worktree_config(struct repository *r)
+{
+	struct worktree **worktrees = get_worktrees(0);
+	char *path;
+
+	if (repository_format_worktree_config)
+		path = repo_git_path(r, "config.worktree");
+	else if (worktrees[0] && worktrees[1])
+		path = NULL;
+	else
+		path = repo_git_path(r, "config");
+
+	free_worktrees(worktrees);
+	return path;
+}
diff --git a/worktree.h b/worktree.h
index 9e3b0b7b6f..4c41002d31 100644
--- a/worktree.h
+++ b/worktree.h
@@ -132,4 +132,11 @@ void strbuf_worktree_ref(const struct worktree *wt,
 const char *worktree_ref(const struct worktree *wt,
 			 const char *refname);
 
+/*
+ * Return the path to config file that can contain worktree-specific
+ * config (or NULL in unsupported setups). The caller must free the
+ * return value.
+ */
+char *get_worktree_config(struct repository *r);
+
 #endif
-- 
2.20.0.482.g66447595a7
Previous: Junio C HamanoNext: Eric Sunshine
Message 4 of 12 in “Add "git config --move-to"”
  1. 0/6 Add "git config --move-to"Nguyễn Thái Ngọc Duy, Dec 27, 2018
  2. 1/6 config.c: avoid git_path() in do_git_config_sequence()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  3. Junio C HamanoJan 10, 2019
  4. 2/6 worktree.c: add get_worktree_config()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  5. Eric SunshineDec 27, 2018
  6. 3/6 config.c: add repo_config_set_worktree_gently()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  7. Derrick StoleeApr 30, 2019
  8. Duy NguyenMay 1, 2019
  9. 4/6 config: use OPT_FILENAME()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  10. Eric SunshineDec 27, 2018
  11. 5/6 config: factor out set_config_source_file()Nguyễn Thái Ngọc Duy, Dec 27, 2018
  12. 6/6 config: add --move-toNguyễn Thái Ngọc Duy, Dec 27, 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.