diff options
| author | Patrick Steinhardt <ps@pks.im> | 2017-05-19 08:59:46 +0200 |
|---|---|---|
| committer | Patrick Steinhardt <ps@pks.im> | 2017-05-19 09:01:21 +0200 |
| commit | 9f9fd05f1cb9278a34a265c49c8567b526e48afd (patch) | |
| tree | 38948cd625b15702c9289d2405ca663818ada825 /src | |
| parent | 32841973f1ee4d6432206b333a9907f3d14a5307 (diff) | |
| download | libgit2-9f9fd05f1cb9278a34a265c49c8567b526e48afd.tar.gz | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/repository.c | 24 |
1 files 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 |
