diff options
| author | Vicent Martà <vicent@github.com> | 2012-02-04 08:38:46 -0800 |
|---|---|---|
| committer | Vicent Martà <vicent@github.com> | 2012-02-04 08:38:46 -0800 |
| commit | 1f0c198468309899655562bba08a70dd0dbd1ea6 (patch) | |
| tree | f9ba87532e6c97eb21b5bf264d2e222238a69d9c | |
| parent | 0a4aebb097bbe7a940c0f73174b756027105d92f (diff) | |
| parent | 99abb79d53781dda9bbdc7b896eaa383d8789cb3 (diff) | |
| download | libgit2-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.c | 2 | ||||
| -rw-r--r-- | tests-clar/refs/listall.c | 36 | ||||
| -rw-r--r-- | tests-clar/repo/open.c | 36 |
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"); } |
