From 9f9fd05f1cb9278a34a265c49c8567b526e48afd Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Fri, 19 May 2017 08:59:46 +0200 Subject: [PATCH] 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. --- src/repository.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/repository.c b/src/repository.c index 7c40d6e3a..fec476396 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