summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-06-04 20:44:14 +0200
committerVicent Marti <tanoku@gmail.com>2011-06-04 20:45:09 +0200
commit602ee38b6e874f61f162ca7239c3a6d8c6099335 (patch)
treed1ea414172f86c1aba25c33544d63296f17bda04
parent793545ef2bc0eb8b331ac715e77a3a77c8225320 (diff)
downloadlibgit2-602ee38b6e874f61f162ca7239c3a6d8c6099335.tar.gz
repository: Export all internal paths
-rw-r--r--include/git2/repository.h27
-rw-r--r--src/repository.c24
-rw-r--r--tests/t12-repo.c8
3 files changed, 39 insertions, 20 deletions
diff --git a/include/git2/repository.h b/include/git2/repository.h
index 4a7303e6..2cb6bfa7 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
+ *
+ * Possible values for `id`:
*
- * If the repository is bare, there is no working directory and NULL we be returned.
+ * 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 0b67d144..249755b6 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 4e51f1b1..35b41ca9 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));