summaryrefslogtreecommitdiff
path: root/tests/t12-repo.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-11-25 08:16:26 +0100
committerVicent Marti <tanoku@gmail.com>2011-11-26 08:37:08 +0100
commit9462c471435b4de74848408bebe41d770dc49a50 (patch)
treeaac5e696d1b3e7b4cba64082b28255e5c4593b66 /tests/t12-repo.c
parent880b6f0c22153db164ecb3a18c362ba8337365d3 (diff)
downloadlibgit2-9462c471435b4de74848408bebe41d770dc49a50.tar.gz
repository: Change ownership semantics
The ownership semantics have been changed all over the library to be consistent. There are no more "borrowed" or duplicated references. Main changes: - `git_repository_open2` and `3` have been dropped. - Added setters and getters to hotswap all the repository owned objects: `git_repository_index` `git_repository_set_index` `git_repository_odb` `git_repository_set_odb` `git_repository_config` `git_repository_set_config` `git_repository_workdir` `git_repository_set_workdir` Now working directories/index files/ODBs and so on can be hot-swapped after creating a repository and between operations. - All these objects now have proper ownership semantics with refcounting: they all require freeing after they are no longer needed (the repository always keeps its internal reference). - Repository open and initialization has been updated to keep in mind the configuration files. Bare repositories are now always detected, and a default config file is created on init. - All the tests affected by these changes have been dropped from the old test suite and ported to the new one.
Diffstat (limited to 'tests/t12-repo.c')
-rw-r--r--tests/t12-repo.c291
1 files changed, 0 insertions, 291 deletions
diff --git a/tests/t12-repo.c b/tests/t12-repo.c
index 47dc852f3..acf8b743d 100644
--- a/tests/t12-repo.c
+++ b/tests/t12-repo.c
@@ -29,288 +29,8 @@
#include "git2/odb_backend.h"
#include "repository.h"
-typedef struct {
- git_odb_backend base;
- int position;
-} fake_backend;
-
-static git_odb_backend *new_backend(int position)
-{
- fake_backend *b;
-
- b = git__malloc(sizeof(fake_backend));
- if (b == NULL)
- return NULL;
-
- memset(b, 0x0, sizeof(fake_backend));
- b->position = position;
- return (git_odb_backend *)b;
-}
-
-static int test_backend_sorting(git_odb *odb)
-{
- unsigned int i;
-
- for (i = 0; i < odb->backends.length; ++i) {
- fake_backend *internal = *((fake_backend **)git_vector_get(&odb->backends, i));
-
- if (internal == NULL)
- return GIT_ERROR;
-
- if (internal->position != (int)i)
- return GIT_ERROR;
- }
-
- return GIT_SUCCESS;
-}
-
-BEGIN_TEST(odb0, "assure that ODB backends are properly sorted")
- git_odb *odb;
- must_pass(git_odb_new(&odb));
- must_pass(git_odb_add_backend(odb, new_backend(0), 5));
- must_pass(git_odb_add_backend(odb, new_backend(2), 3));
- must_pass(git_odb_add_backend(odb, new_backend(1), 4));
- must_pass(git_odb_add_backend(odb, new_backend(3), 1));
- must_pass(test_backend_sorting(odb));
- git_odb_close(odb);
-END_TEST
-
-BEGIN_TEST(odb1, "assure that alternate backends are properly sorted")
- git_odb *odb;
- must_pass(git_odb_new(&odb));
- must_pass(git_odb_add_backend(odb, new_backend(0), 5));
- must_pass(git_odb_add_backend(odb, new_backend(2), 3));
- must_pass(git_odb_add_backend(odb, new_backend(1), 4));
- must_pass(git_odb_add_backend(odb, new_backend(3), 1));
- must_pass(git_odb_add_alternate(odb, new_backend(4), 5));
- must_pass(git_odb_add_alternate(odb, new_backend(6), 3));
- must_pass(git_odb_add_alternate(odb, new_backend(5), 4));
- must_pass(git_odb_add_alternate(odb, new_backend(7), 1));
- must_pass(test_backend_sorting(odb));
- git_odb_close(odb);
-END_TEST
-
-
-#define STANDARD_REPOSITORY 0
-#define BARE_REPOSITORY 1
-
-static int ensure_repository_init(
- const char *working_directory,
- int repository_kind,
- const char *expected_path_index,
- const char *expected_path_repository,
- const char *expected_working_directory)
-{
- char path_odb[GIT_PATH_MAX];
- git_repository *repo;
-
- if (git_futils_isdir(working_directory) == GIT_SUCCESS)
- return GIT_ERROR;
-
- git_path_join(path_odb, expected_path_repository, GIT_OBJECTS_DIR);
-
- if (git_repository_init(&repo, working_directory, repository_kind) < GIT_SUCCESS)
- return GIT_ERROR;
-
- if (repo->path_workdir != NULL || expected_working_directory != NULL) {
- if (git__suffixcmp(repo->path_workdir, expected_working_directory) != 0)
- goto cleanup;
- }
-
- if (git__suffixcmp(repo->path_odb, path_odb) != 0)
- goto cleanup;
-
- if (git__suffixcmp(repo->path_repository, expected_path_repository) != 0)
- goto cleanup;
-
- if (repo->path_index != NULL || expected_path_index != NULL) {
- if (git__suffixcmp(repo->path_index, expected_path_index) != 0)
- goto cleanup;
-
-#ifdef GIT_WIN32
- if ((GetFileAttributes(repo->path_repository) & FILE_ATTRIBUTE_HIDDEN) == 0)
- goto cleanup;
-#endif
-
- if (git_repository_is_bare(repo) == 1)
- goto cleanup;
- } else if (git_repository_is_bare(repo) == 0)
- goto cleanup;
-
- if (git_repository_is_empty(repo) == 0)
- goto cleanup;
-
- git_repository_free(repo);
- git_futils_rmdir_r(working_directory, 1);
-
- return GIT_SUCCESS;
-
-cleanup:
- git_repository_free(repo);
- git_futils_rmdir_r(working_directory, 1);
- return GIT_ERROR;
-}
-
-BEGIN_TEST(init0, "initialize a standard repo")
- char path_index[GIT_PATH_MAX], path_repository[GIT_PATH_MAX];
-
- git_path_join(path_repository, TEMP_REPO_FOLDER, GIT_DIR);
- git_path_join(path_index, path_repository, GIT_INDEX_FILE);
-
- must_pass(ensure_repository_init(TEMP_REPO_FOLDER, STANDARD_REPOSITORY, path_index, path_repository, TEMP_REPO_FOLDER));
- must_pass(ensure_repository_init(TEMP_REPO_FOLDER_NS, STANDARD_REPOSITORY, path_index, path_repository, TEMP_REPO_FOLDER));
-END_TEST
-
-BEGIN_TEST(init1, "initialize a bare repo")
- char path_repository[GIT_PATH_MAX];
-
- git_path_join(path_repository, TEMP_REPO_FOLDER, "");
-
- must_pass(ensure_repository_init(TEMP_REPO_FOLDER, BARE_REPOSITORY, NULL, path_repository, NULL));
- must_pass(ensure_repository_init(TEMP_REPO_FOLDER_NS, BARE_REPOSITORY, NULL, path_repository, NULL));
-END_TEST
-
-BEGIN_TEST(init2, "Initialize and open a bare repo with a relative path escaping out of the current working directory")
- char path_repository[GIT_PATH_MAX];
- char current_workdir[GIT_PATH_MAX];
- const mode_t mode = 0777;
- git_repository* repo;
-
- must_pass(p_getcwd(current_workdir, sizeof(current_workdir)));
-
- git_path_join(path_repository, TEMP_REPO_FOLDER, "a/b/c/");
- must_pass(git_futils_mkdir_r(path_repository, mode));
-
- must_pass(chdir(path_repository));
-
- must_pass(git_repository_init(&repo, "../d/e.git", 1));
- must_pass(git__suffixcmp(repo->path_repository, "/a/b/d/e.git/"));
-
- git_repository_free(repo);
-
- must_pass(git_repository_open(&repo, "../d/e.git"));
-
- git_repository_free(repo);
-
- must_pass(chdir(current_workdir));
- must_pass(git_futils_rmdir_r(TEMP_REPO_FOLDER, 1));
-END_TEST
-
#define EMPTY_BARE_REPOSITORY_FOLDER TEST_RESOURCES "/empty_bare.git/"
-BEGIN_TEST(open0, "Open a bare repository that has just been initialized by git")
- git_repository *repo;
-
- must_pass(copydir_recurs(EMPTY_BARE_REPOSITORY_FOLDER, TEMP_REPO_FOLDER));
- 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, GIT_REPO_PATH) != NULL);
- must_be_true(git_repository_path(repo, GIT_REPO_PATH_WORKDIR) == NULL);
-
- git_repository_free(repo);
- must_pass(git_futils_rmdir_r(TEMP_REPO_FOLDER, 1));
-END_TEST
-
-BEGIN_TEST(open1, "Open a standard repository that has just been initialized by git")
- git_repository *repo;
-
- must_pass(copydir_recurs(EMPTY_REPOSITORY_FOLDER, TEST_STD_REPO_FOLDER));
- must_pass(remove_placeholders(TEST_STD_REPO_FOLDER, "dummy-marker.txt"));
-
- must_pass(git_repository_open(&repo, TEST_STD_REPO_FOLDER));
- 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(git_futils_rmdir_r(TEMP_REPO_FOLDER, 1));
-END_TEST
-
-
-BEGIN_TEST(open2, "Open a bare repository with a relative path escaping out of the current working directory")
- char new_current_workdir[GIT_PATH_MAX];
- char current_workdir[GIT_PATH_MAX];
- char path_repository[GIT_PATH_MAX];
-
- const mode_t mode = 0777;
- git_repository* repo;
-
- /* Setup the repository to open */
- must_pass(p_getcwd(current_workdir, sizeof(current_workdir)));
- strcpy(path_repository, current_workdir);
- git_path_join_n(path_repository, 3, path_repository, TEMP_REPO_FOLDER, "a/d/e.git");
- must_pass(copydir_recurs(REPOSITORY_FOLDER, path_repository));
-
- /* Change the current working directory */
- git_path_join(new_current_workdir, TEMP_REPO_FOLDER, "a/b/c/");
- must_pass(git_futils_mkdir_r(new_current_workdir, mode));
- must_pass(chdir(new_current_workdir));
-
- must_pass(git_repository_open(&repo, "../../d/e.git"));
-
- git_repository_free(repo);
-
- must_pass(chdir(current_workdir));
- must_pass(git_futils_rmdir_r(TEMP_REPO_FOLDER, 1));
-END_TEST
-
-BEGIN_TEST(empty0, "test if a repository is empty or not")
-
- git_repository *repo_empty, *repo_normal;
-
- must_pass(git_repository_open(&repo_normal, REPOSITORY_FOLDER));
- must_be_true(git_repository_is_empty(repo_normal) == 0);
- git_repository_free(repo_normal);
-
- must_pass(git_repository_open(&repo_empty, EMPTY_BARE_REPOSITORY_FOLDER));
- must_be_true(git_repository_is_empty(repo_empty) == 1);
- git_repository_free(repo_empty);
-END_TEST
-
-BEGIN_TEST(detached0, "test if HEAD is detached")
- git_repository *repo;
- git_reference *ref;
- git_oid oid;
-
- must_pass(git_repository_open(&repo, REPOSITORY_FOLDER));
-
- must_be_true(git_repository_head_detached(repo) == 0);
-
- /* detach the HEAD */
- git_oid_fromstr(&oid, "c47800c7266a2be04c571c04d5a6614691ea99bd");
- must_pass(git_reference_create_oid(&ref, repo, "HEAD", &oid, 1));
- must_be_true(git_repository_head_detached(repo) == 1);
-
- /* take the reop back to it's original state */
- must_pass(git_reference_create_symbolic(&ref, repo, "HEAD", "refs/heads/master", 1));
- must_be_true(git_repository_head_detached(repo) == 0);
-
- git_repository_free(repo);
-
- git_reference_free(ref);
-END_TEST
-
-BEGIN_TEST(orphan0, "test if HEAD is orphan")
- git_repository *repo;
- git_reference *ref;
-
- must_pass(git_repository_open(&repo, REPOSITORY_FOLDER));
-
- must_be_true(git_repository_head_orphan(repo) == 0);
-
- /* orphan HEAD */
- must_pass(git_reference_create_symbolic(&ref, repo, "HEAD", "refs/heads/orphan", 1));
- must_be_true(git_repository_head_orphan(repo) == 1);
-
- /* take the reop back to it's original state */
- must_pass(git_reference_create_symbolic(&ref, repo, "HEAD", "refs/heads/master", 1));
- must_be_true(git_repository_head_orphan(repo) == 0);
-
- git_repository_free(repo);
-
- git_reference_free(ref);
-END_TEST
-
#define DISCOVER_FOLDER TEMP_REPO_FOLDER "discover.git"
#define SUB_REPOSITORY_FOLDER_NAME "sub_repo"
@@ -449,17 +169,6 @@ BEGIN_TEST(discover0, "test discover")
END_TEST
BEGIN_SUITE(repository)
- ADD_TEST(odb0);
- ADD_TEST(odb1);
- ADD_TEST(init0);
- ADD_TEST(init1);
- ADD_TEST(init2);
- ADD_TEST(open0);
- ADD_TEST(open1);
- ADD_TEST(open2);
- ADD_TEST(empty0);
- ADD_TEST(detached0);
- ADD_TEST(orphan0);
ADD_TEST(discover0);
END_SUITE