summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2012-02-04 08:38:46 -0800
committerVicent Martí <vicent@github.com>2012-02-04 08:38:46 -0800
commit1f0c198468309899655562bba08a70dd0dbd1ea6 (patch)
treef9ba87532e6c97eb21b5bf264d2e222238a69d9c
parent0a4aebb097bbe7a940c0f73174b756027105d92f (diff)
parent99abb79d53781dda9bbdc7b896eaa383d8789cb3 (diff)
downloadlibgit2-1f0c198468309899655562bba08a70dd0dbd1ea6.tar.gz
Merge pull request #549 from nulltoken/fix/open-repo-with-workdir-path
Fix trailing slash issue to the gitdir path when the repo is opened through a workdir
-rw-r--r--src/repository.c2
-rw-r--r--tests-clar/refs/listall.c36
-rw-r--r--tests-clar/repo/open.c36
3 files changed, 66 insertions, 8 deletions
diff --git a/src/repository.c b/src/repository.c
index 74f0d8f98..536522a9b 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -166,7 +166,7 @@ int git_repository_open(git_repository **repo_out, const char *path)
* of the working dir, by testing if it contains a `.git`
* folder inside of it.
*/
- git_path_contains_dir(&path_buf, DOT_GIT, 1); /* append on success */
+ git_path_contains_dir(&path_buf, GIT_DIR, 1); /* append on success */
/* ignore error, since it just means `path/.git` doesn't exist */
if (quickcheck_repository_dir(&path_buf) < GIT_SUCCESS) {
diff --git a/tests-clar/refs/listall.c b/tests-clar/refs/listall.c
new file mode 100644
index 000000000..4aa7051c8
--- /dev/null
+++ b/tests-clar/refs/listall.c
@@ -0,0 +1,36 @@
+#include "clar_libgit2.h"
+#include "posix.h"
+
+static git_repository *repo;
+static git_strarray ref_list;
+
+static void ensure_no_refname_starts_with_a_forward_slash(const char *path)
+{
+ int i;
+
+ cl_git_pass(git_repository_open(&repo, path));
+ cl_git_pass(git_reference_listall(&ref_list, repo, GIT_REF_LISTALL));
+
+ cl_assert(ref_list.count > 0);
+
+ for (i = 0; i < ref_list.count; i++)
+ cl_assert(git__prefixcmp(ref_list.strings[i], "/") != 0);
+
+ git_strarray_free(&ref_list);
+ git_repository_free(repo);
+}
+
+void test_refs_listall__from_repository_opened_through_workdir_path(void)
+{
+ cl_fixture_sandbox("status");
+ cl_git_pass(p_rename("status/.gitted", "status/.git"));
+
+ ensure_no_refname_starts_with_a_forward_slash("status");
+
+ cl_fixture_cleanup("status");
+}
+
+void test_refs_listall__from_repository_opened_through_gitdir_path(void)
+{
+ ensure_no_refname_starts_with_a_forward_slash(cl_fixture("testrepo.git"));
+}
diff --git a/tests-clar/repo/open.c b/tests-clar/repo/open.c
index b5002843c..c3a7dadbd 100644
--- a/tests-clar/repo/open.c
+++ b/tests-clar/repo/open.c
@@ -1,24 +1,46 @@
#include "clar_libgit2.h"
#include "posix.h"
-void test_repo_open__bare_empty_repo(void)
+static git_repository *repo;
+
+void test_repo_open__cleanup(void)
{
- git_repository *repo;
+ git_repository_free(repo);
+}
+void test_repo_open__bare_empty_repo(void)
+{
cl_git_pass(git_repository_open(&repo, cl_fixture("empty_bare.git")));
+
cl_assert(git_repository_path(repo) != NULL);
+ cl_assert(git__suffixcmp(git_repository_path(repo), "/") == 0);
+
cl_assert(git_repository_workdir(repo) == NULL);
+}
- git_repository_free(repo);
+void test_repo_open__standard_empty_repo_through_gitdir(void)
+{
+ cl_git_pass(git_repository_open(&repo, cl_fixture("empty_standard_repo/.gitted")));
+
+ cl_assert(git_repository_path(repo) != NULL);
+ cl_assert(git__suffixcmp(git_repository_path(repo), "/") == 0);
+
+ cl_assert(git_repository_workdir(repo) != NULL);
+ cl_assert(git__suffixcmp(git_repository_workdir(repo), "/") == 0);
}
-void test_repo_open__standard_empty_repo(void)
+void test_repo_open__standard_empty_repo_through_workdir(void)
{
- git_repository *repo;
+ cl_fixture_sandbox("empty_standard_repo");
+ cl_git_pass(p_rename("empty_standard_repo/.gitted", "empty_standard_repo/.git"));
+
+ cl_git_pass(git_repository_open(&repo, "empty_standard_repo"));
- cl_git_pass(git_repository_open(&repo, cl_fixture("empty_standard_repo/.gitted")));
cl_assert(git_repository_path(repo) != NULL);
+ cl_assert(git__suffixcmp(git_repository_path(repo), "/") == 0);
+
cl_assert(git_repository_workdir(repo) != NULL);
+ cl_assert(git__suffixcmp(git_repository_workdir(repo), "/") == 0);
- git_repository_free(repo);
+ cl_fixture_cleanup("empty_standard_repo");
}