@@ -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 =
@@ -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;
+}
@@ -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
"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(-)