repository: extract function to get path to a file in a work tree

The function `read_worktree_head` has the logic embedded to construct
the path to `HEAD` in the work tree's git directory, which is quite
useful for other callers. Extract the logic into its own function to
make it reusable by others.
This commit is contained in:
Patrick Steinhardt 2017-04-04 17:12:22 +02:00
parent 8242cc1a23
commit 987f565917

View File

@ -2063,6 +2063,12 @@ int git_repository_head_detached(git_repository *repo)
return exists;
}
static int get_worktree_file_path(git_buf *out, git_repository *repo, const char *worktree, const char *file)
{
git_buf_clear(out);
return git_buf_printf(out, "%s/worktrees/%s/%s", repo->commondir, worktree, file);
}
static int read_worktree_head(git_buf *out, git_repository *repo, const char *name)
{
git_buf path = GIT_BUF_INIT;
@ -2070,17 +2076,8 @@ static int read_worktree_head(git_buf *out, git_repository *repo, const char *na
assert(out && repo && name);
git_buf_clear(out);
if ((err = git_buf_printf(&path, "%s/worktrees/%s/HEAD", repo->commondir, name)) < 0)
goto out;
if (!git_path_exists(path.ptr))
{
err = -1;
goto out;
}
if ((err = git_futils_readbuffer(out, path.ptr)) < 0)
if ((err = get_worktree_file_path(&path, repo, name, "HEAD")) < 0 ||
(err = git_futils_readbuffer(out, path.ptr)) < 0)
goto out;
git_buf_rtrim(out);