Stefan Beller <sbeller@xxxxxxxxxx> writes: > Subject: Re: [PATCH 1/3] submodule: use absolute path for computing relative path connecting connecting what? IOW, has the subject line somehow truncated? > This addresses a similar concern as in f8eaa0ba98b (submodule--helper, > module_clone: always operate on absolute paths, 2016-03-31) > > When computing the relative path from one to another location, we > need to provide both locations as absolute paths to make sure the > computation of the relative path is correct. Can the effect of this change demonstrated in a new test? There must be a scenario where the current behaviour is broken and this change fixes an incorrect computation of relative path, no? > > While at it, change `real_work_tree` to be non const as we own > the memory. > > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > submodule.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/submodule.c b/submodule.c > index 6f7d883de9..66c5ce5a24 100644 > --- a/submodule.c > +++ b/submodule.c > @@ -1227,23 +1227,25 @@ void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir) > { > struct strbuf file_name = STRBUF_INIT; > struct strbuf rel_path = STRBUF_INIT; > - const char *real_work_tree = xstrdup(real_path(work_tree)); > + char *real_git_dir = xstrdup(real_path(git_dir)); > + char *real_work_tree = xstrdup(real_path(work_tree)); > > /* Update gitfile */ > strbuf_addf(&file_name, "%s/.git", work_tree); > write_file(file_name.buf, "gitdir: %s", > - relative_path(git_dir, real_work_tree, &rel_path)); > + relative_path(real_git_dir, real_work_tree, &rel_path)); > > /* Update core.worktree setting */ > strbuf_reset(&file_name); > - strbuf_addf(&file_name, "%s/config", git_dir); > + strbuf_addf(&file_name, "%s/config", real_git_dir); > git_config_set_in_file(file_name.buf, "core.worktree", > - relative_path(real_work_tree, git_dir, > + relative_path(real_work_tree, real_git_dir, > &rel_path)); > > strbuf_release(&file_name); > strbuf_release(&rel_path); > - free((void *)real_work_tree); > + free(real_work_tree); > + free(real_git_dir); > } > > int parallel_submodules(void)