repository: factor out worktree check The check whether a repository is a worktree or not is currently done inside of `git_repository_open_ext`. As we want to extend this function later on, pull it out into its own function `repo_is_worktree` to ease working on it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
diff --git a/src/repository.c b/src/repository.c
index 7c40d6e..fec4763 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -758,6 +758,22 @@ success:
return error;
}
+static int repo_is_worktree(unsigned *out, const git_repository *repo)
+{
+ git_buf gitdir_link = GIT_BUF_INIT;
+ int error;
+
+ if ((error = git_buf_joinpath(&gitdir_link, repo->gitdir, "gitdir")) < 0)
+ return -1;
+
+ /* A 'gitdir' file inside a git directory is currently
+ * only used when the repository is a working tree. */
+ *out = !!git_path_exists(gitdir_link.ptr);
+
+ git_buf_free(&gitdir_link);
+ return error;
+}
+
int git_repository_open_ext(
git_repository **repo_ptr,
const char *start_path,
@@ -765,6 +781,7 @@ int git_repository_open_ext(
const char *ceiling_dirs)
{
int error;
+ unsigned is_worktree;
git_buf gitdir = GIT_BUF_INIT, workdir = GIT_BUF_INIT,
gitlink = GIT_BUF_INIT, commondir = GIT_BUF_INIT;
git_repository *repo;
@@ -797,12 +814,9 @@ int git_repository_open_ext(
GITERR_CHECK_ALLOC(repo->commondir);
}
- if ((error = git_buf_joinpath(&gitdir, repo->gitdir, "gitdir")) < 0)
+ if ((error = repo_is_worktree(&is_worktree, repo)) < 0)
goto cleanup;
- /* A 'gitdir' file inside a git directory is currently
- * only used when the repository is a working tree. */
- if (git_path_exists(gitdir.ptr))
- repo->is_worktree = 1;
+ repo->is_worktree = is_worktree;
/*
* We'd like to have the config, but git doesn't particularly