From 602ee38b6e874f61f162ca7239c3a6d8c6099335 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Sat, 4 Jun 2011 20:44:14 +0200 Subject: [PATCH] repository: Export all internal paths --- include/git2/repository.h | 27 ++++++++++++++++++--------- src/repository.c | 24 +++++++++++++++++------- tests/t12-repo.c | 8 ++++---- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/include/git2/repository.h b/include/git2/repository.h index 4a7303e68..2cb6bfa7b 100644 --- a/include/git2/repository.h +++ b/include/git2/repository.h @@ -231,22 +231,31 @@ GIT_EXTERN(int) git_repository_init(git_repository **repo_out, const char *path, GIT_EXTERN(int) git_repository_is_empty(git_repository *repo); /** - * Get the normalized path to the git repository. - * - * @param repo a repository object - * @return absolute path to the git directory + * Internal path identifiers for a repository */ -GIT_EXTERN(const char *) git_repository_path(git_repository *repo); +typedef enum { + GIT_REPO_PATH, + GIT_REPO_PATH_INDEX, + GIT_REPO_PATH_ODB, + GIT_REPO_PATH_WORKDIR +} git_repository_pathid; /** - * Get the normalized path to the working directory of the repository. + * Get one of the paths to the repository * - * If the repository is bare, there is no working directory and NULL we be returned. + * Possible values for `id`: + * + * GIT_REPO_PATH: return the path to the repository + * GIT_REPO_PATH_INDEX: return the path to the index + * GIT_REPO_PATH_ODB: return the path to the ODB + * GIT_REPO_PATH_WORKDIR: return the path to the working + * directory * * @param repo a repository object - * @return NULL if the repository is bare; absolute path to the working directory otherwise. + * @param id The ID of the path to return + * @return absolute path of the requested id */ -GIT_EXTERN(const char *) git_repository_workdir(git_repository *repo); +GIT_EXTERN(const char *) git_repository_path(git_repository *repo, git_repository_pathid id); /** * Check if a repository is bare diff --git a/src/repository.c b/src/repository.c index 0b67d144c..249755b62 100644 --- a/src/repository.c +++ b/src/repository.c @@ -721,16 +721,26 @@ int git_repository_is_empty(git_repository *repo) return git_reference_resolve(&branch, head) == GIT_SUCCESS ? 0 : 1; } -const char *git_repository_path(git_repository *repo) +const char *git_repository_path(git_repository *repo, git_repository_pathid id) { assert(repo); - return repo->path_repository; -} -const char *git_repository_workdir(git_repository *repo) -{ - assert(repo); - return repo->path_workdir; + switch (id) { + case GIT_REPO_PATH: + return repo->path_repository; + + case GIT_REPO_PATH_INDEX: + return repo->path_index; + + case GIT_REPO_PATH_ODB: + return repo->path_odb; + + case GIT_REPO_PATH_WORKDIR: + return repo->path_workdir; + + default: + return NULL; + } } int git_repository_is_bare(git_repository *repo) diff --git a/tests/t12-repo.c b/tests/t12-repo.c index 4e51f1b15..35b41ca97 100644 --- a/tests/t12-repo.c +++ b/tests/t12-repo.c @@ -201,8 +201,8 @@ BEGIN_TEST(open0, "Open a bare repository that has just been initialized by git" must_pass(remove_placeholders(TEMP_REPO_FOLDER, "dummy-marker.txt")); must_pass(git_repository_open(&repo, TEMP_REPO_FOLDER)); - must_be_true(git_repository_path(repo) != NULL); - must_be_true(git_repository_workdir(repo) == NULL); + must_be_true(git_repository_path(repo, GIT_REPO_PATH) != NULL); + must_be_true(git_repository_path(repo, GIT_REPO_PATH_WORKDIR) == NULL); git_repository_free(repo); must_pass(rmdir_recurs(TEMP_REPO_FOLDER)); @@ -220,8 +220,8 @@ BEGIN_TEST(open1, "Open a standard repository that has just been initialized by must_pass(remove_placeholders(DEST_REPOSITORY_FOLDER, "dummy-marker.txt")); must_pass(git_repository_open(&repo, DEST_REPOSITORY_FOLDER)); - must_be_true(git_repository_path(repo) != NULL); - must_be_true(git_repository_workdir(repo) != NULL); + must_be_true(git_repository_path(repo, GIT_REPO_PATH) != NULL); + must_be_true(git_repository_path(repo, GIT_REPO_PATH_WORKDIR) != NULL); git_repository_free(repo); must_pass(rmdir_recurs(TEMP_REPO_FOLDER));