submodule: use absolute path for computing relative path connecting
The current caller of connect_work_tree_and_git_dir passes an absolute path for the `git_dir` parameter. In the future patch we will also pass in relative path for `git_dir`. Extend the functionality of connect_work_tree_and_git_dir to take relative paths for parameters. We could work around this in the future patch by computing the absolute path for the git_dir in the calling site, however accepting relative paths for either parameter makes the API for this function much harder to misuse. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4df1d4d466
commit
90c0011619
13
submodule.c
13
submodule.c
@ -1223,27 +1223,28 @@ int merge_submodule(unsigned char result[20], const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Update gitfile and core.worktree setting to connect work tree and git dir */
|
/* Update gitfile and core.worktree setting to connect work tree and git dir */
|
||||||
void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir)
|
void connect_work_tree_and_git_dir(const char *work_tree_, const char *git_dir_)
|
||||||
{
|
{
|
||||||
struct strbuf file_name = STRBUF_INIT;
|
struct strbuf file_name = STRBUF_INIT;
|
||||||
struct strbuf rel_path = STRBUF_INIT;
|
struct strbuf rel_path = STRBUF_INIT;
|
||||||
const char *real_work_tree = xstrdup(real_path(work_tree));
|
char *git_dir = xstrdup(real_path(git_dir_));
|
||||||
|
char *work_tree = xstrdup(real_path(work_tree_));
|
||||||
|
|
||||||
/* Update gitfile */
|
/* Update gitfile */
|
||||||
strbuf_addf(&file_name, "%s/.git", work_tree);
|
strbuf_addf(&file_name, "%s/.git", work_tree);
|
||||||
write_file(file_name.buf, "gitdir: %s",
|
write_file(file_name.buf, "gitdir: %s",
|
||||||
relative_path(git_dir, real_work_tree, &rel_path));
|
relative_path(git_dir, work_tree, &rel_path));
|
||||||
|
|
||||||
/* Update core.worktree setting */
|
/* Update core.worktree setting */
|
||||||
strbuf_reset(&file_name);
|
strbuf_reset(&file_name);
|
||||||
strbuf_addf(&file_name, "%s/config", git_dir);
|
strbuf_addf(&file_name, "%s/config", git_dir);
|
||||||
git_config_set_in_file(file_name.buf, "core.worktree",
|
git_config_set_in_file(file_name.buf, "core.worktree",
|
||||||
relative_path(real_work_tree, git_dir,
|
relative_path(work_tree, git_dir, &rel_path));
|
||||||
&rel_path));
|
|
||||||
|
|
||||||
strbuf_release(&file_name);
|
strbuf_release(&file_name);
|
||||||
strbuf_release(&rel_path);
|
strbuf_release(&rel_path);
|
||||||
free((void *)real_work_tree);
|
free(work_tree);
|
||||||
|
free(git_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
int parallel_submodules(void)
|
int parallel_submodules(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user