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:
Stefan Beller 2016-12-08 13:03:24 -08:00 committed by Junio C Hamano
parent 4df1d4d466
commit 90c0011619

View File

@ -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)