| #include "clar_libgit2.h" |
| |
| #include "repository.h" |
| |
| static git_repository *g_repo; |
| static git_tree *g_root_tree; |
| static git_commit *g_head_commit; |
| static git_object *g_expectedobject, |
| *g_actualobject; |
| |
| void test_object_lookupbypath__initialize(void) |
| { |
| git_reference *head; |
| git_tree_entry *tree_entry; |
| |
| cl_git_pass(git_repository_open(&g_repo, cl_fixture("attr/.gitted"))); |
| |
| cl_git_pass(git_repository_head(&head, g_repo)); |
| cl_git_pass(git_reference_peel((git_object**)&g_head_commit, head, GIT_OBJ_COMMIT)); |
| cl_git_pass(git_commit_tree(&g_root_tree, g_head_commit)); |
| cl_git_pass(git_tree_entry_bypath(&tree_entry, g_root_tree, "subdir/subdir_test2.txt")); |
| cl_git_pass(git_object_lookup(&g_expectedobject, g_repo, git_tree_entry_id(tree_entry), |
| GIT_OBJ_ANY)); |
| |
| git_tree_entry_free(tree_entry); |
| git_reference_free(head); |
| |
| g_actualobject = NULL; |
| } |
| void test_object_lookupbypath__cleanup(void) |
| { |
| git_object_free(g_actualobject); |
| git_object_free(g_expectedobject); |
| git_tree_free(g_root_tree); |
| git_commit_free(g_head_commit); |
| g_expectedobject = NULL; |
| git_repository_free(g_repo); |
| g_repo = NULL; |
| } |
| |
| void test_object_lookupbypath__errors(void) |
| { |
| cl_assert_equal_i(GIT_EINVALIDSPEC, |
| git_object_lookup_bypath(&g_actualobject, (git_object*)g_root_tree, |
| "subdir/subdir_test2.txt", GIT_OBJ_TREE)); // It's not a tree |
| cl_assert_equal_i(GIT_ENOTFOUND, |
| git_object_lookup_bypath(&g_actualobject, (git_object*)g_root_tree, |
| "file/doesnt/exist", GIT_OBJ_ANY)); |
| } |
| |
| void test_object_lookupbypath__from_root_tree(void) |
| { |
| cl_git_pass(git_object_lookup_bypath(&g_actualobject, (git_object*)g_root_tree, |
| "subdir/subdir_test2.txt", GIT_OBJ_BLOB)); |
| cl_assert_equal_oid(git_object_id(g_expectedobject), |
| git_object_id(g_actualobject)); |
| } |
| |
| void test_object_lookupbypath__from_head_commit(void) |
| { |
| cl_git_pass(git_object_lookup_bypath(&g_actualobject, (git_object*)g_head_commit, |
| "subdir/subdir_test2.txt", GIT_OBJ_BLOB)); |
| cl_assert_equal_oid(git_object_id(g_expectedobject), |
| git_object_id(g_actualobject)); |
| } |
| |
| void test_object_lookupbypath__from_subdir_tree(void) |
| { |
| git_tree_entry *entry = NULL; |
| git_tree *tree = NULL; |
| |
| cl_git_pass(git_tree_entry_bypath(&entry, g_root_tree, "subdir")); |
| cl_git_pass(git_tree_lookup(&tree, g_repo, git_tree_entry_id(entry))); |
| |
| cl_git_pass(git_object_lookup_bypath(&g_actualobject, (git_object*)tree, |
| "subdir_test2.txt", GIT_OBJ_BLOB)); |
| cl_assert_equal_oid(git_object_id(g_expectedobject), |
| git_object_id(g_actualobject)); |
| |
| git_tree_entry_free(entry); |
| git_tree_free(tree); |
| } |
| |