]> git.proxmox.com Git - libgit2.git/commit
worktree: compute workdir for worktrees opened via their gitdir
authorPatrick Steinhardt <ps@pks.im>
Fri, 4 Nov 2016 12:39:54 +0000 (13:39 +0100)
committerPatrick Steinhardt <ps@pks.im>
Mon, 13 Feb 2017 10:08:57 +0000 (11:08 +0100)
commit39abd3adaa62f287f5cda0a63c7cfca647283e9c
treeca70df85e7e482538db680e5bb0caf8627f725fb
parent84f56cb05afe7a60501f310ba1329bb98ef8756d
worktree: compute workdir for worktrees opened via their gitdir

When opening a worktree via the gitdir of its parent repository
we fail to correctly set up the worktree's working directory. The
problem here is two-fold: we first fail to see that the gitdir
actually is a gitdir of a working tree and then subsequently
fail to determine the working tree location from the gitdir.

The first problem of not noticing a gitdir belongs to a worktree
can be solved by checking for the existence of a `gitdir` file in
the gitdir. This file points back to the gitlink file located in
the working tree's working directory. As this file only exists
for worktrees, it should be sufficient indication of the gitdir
belonging to a worktree.

The second problem, that is determining the location of the
worktree's working directory, can then be solved by reading the
`gitdir` file in the working directory's gitdir. When we now
resolve relative paths and strip the final `.git` component, we
have the actual worktree's working directory location.
src/repository.c
src/worktree.c
src/worktree.h
tests/worktree/open.c
tests/worktree/worktree.c