Stefan Beller <sbel...@google.com> 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 <sbel...@google.com>
> ---

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

Reply via email to