mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-02 16:20:01 +00:00
worktree: parent path should point to the working dir
The working tree's parent path should not point to the parent's gitdir, but to the parent's working directory. Pointing to the gitdir would not make any sense, as the parent's working directory is actually equal to both repository's common directory. Fix the issue.
This commit is contained in:
parent
3017ba94a3
commit
20a368e2d7
@ -174,7 +174,7 @@ int git_worktree_lookup(git_worktree **out, git_repository *repo, const char *na
|
||||
if ((error = git_buf_printf(&path, "%s/worktrees/%s", repo->commondir, name)) < 0)
|
||||
goto out;
|
||||
|
||||
if ((error = (open_worktree_dir(out, git_repository_path(repo), path.ptr, name))) < 0)
|
||||
if ((error = (open_worktree_dir(out, git_repository_workdir(repo), path.ptr, name))) < 0)
|
||||
goto out;
|
||||
|
||||
out:
|
||||
@ -202,7 +202,7 @@ int git_worktree_open_from_repository(git_worktree **out, git_repository *repo)
|
||||
gitdir = git_repository_path(repo);
|
||||
commondir = git_repository_commondir(repo);
|
||||
|
||||
if ((error = git_path_prettify_dir(&parent, commondir, NULL)) < 0)
|
||||
if ((error = git_path_prettify_dir(&parent, "..", commondir)) < 0)
|
||||
goto out;
|
||||
|
||||
/* The name is defined by the last component in '.git/worktree/%s' */
|
||||
@ -457,7 +457,7 @@ int git_worktree_prune(git_worktree *wt, unsigned flags)
|
||||
}
|
||||
|
||||
/* Delete gitdir in parent repository */
|
||||
if ((err = git_buf_printf(&path, "%s/worktrees/%s", wt->parent_path, wt->name)) < 0)
|
||||
if ((err = git_buf_printf(&path, "%s/worktrees/%s", wt->commondir_path, wt->name)) < 0)
|
||||
goto out;
|
||||
if (!git_path_exists(path.ptr))
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ struct git_worktree {
|
||||
/* Path to the common directory contained in the parent
|
||||
* repository */
|
||||
char *commondir_path;
|
||||
/* Path to the parent's .git directory */
|
||||
/* Path to the parent's working directory */
|
||||
char *parent_path;
|
||||
|
||||
int locked:1;
|
||||
|
@ -118,8 +118,9 @@ void test_worktree_worktree__lookup(void)
|
||||
cl_git_pass(git_buf_joinpath(&gitdir_path, fixture.repo->commondir, "worktrees/testrepo-worktree/"));
|
||||
|
||||
cl_assert_equal_s(wt->gitdir_path, gitdir_path.ptr);
|
||||
cl_assert_equal_s(wt->parent_path, fixture.repo->gitdir);
|
||||
cl_assert_equal_s(wt->parent_path, fixture.repo->workdir);
|
||||
cl_assert_equal_s(wt->gitlink_path, fixture.worktree->gitlink);
|
||||
cl_assert_equal_s(wt->commondir_path, fixture.repo->gitdir);
|
||||
cl_assert_equal_s(wt->commondir_path, fixture.repo->commondir);
|
||||
|
||||
git_buf_free(&gitdir_path);
|
||||
|
Loading…
Reference in New Issue
Block a user