#include "clar_libgit2.h" #include "tree.h" static git_repository *repo; static const char *blob_oid = "3d0970ec547fc41ef8a5882dde99c6adce65b021"; static const char *tree_oid = "1b05fdaa881ee45b48cbaa5e9b037d667a47745e"; void test_object_tree_attributes__initialize(void) { repo = cl_git_sandbox_init("deprecated-mode.git"); } void test_object_tree_attributes__cleanup(void) { cl_git_sandbox_cleanup(); } void test_object_tree_attributes__ensure_correctness_of_attributes_on_insertion(void) { git_treebuilder *builder; git_oid oid; cl_git_pass(git_oid_fromstr(&oid, blob_oid)); cl_git_pass(git_treebuilder_new(&builder, repo, NULL)); cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, (git_filemode_t)0777777)); cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, (git_filemode_t)0100666)); cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, (git_filemode_t)0000001)); git_treebuilder_free(builder); } void test_object_tree_attributes__group_writable_tree_entries_created_with_an_antique_git_version_can_still_be_accessed(void) { git_oid tid; git_tree *tree; const git_tree_entry *entry; cl_git_pass(git_oid_fromstr(&tid, tree_oid)); cl_git_pass(git_tree_lookup(&tree, repo, &tid)); entry = git_tree_entry_byname(tree, "old_mode.txt"); cl_assert_equal_i( GIT_FILEMODE_BLOB, git_tree_entry_filemode(entry)); git_tree_free(tree); } void test_object_tree_attributes__treebuilder_reject_invalid_filemode(void) { git_treebuilder *builder; git_oid bid; const git_tree_entry *entry; cl_git_pass(git_oid_fromstr(&bid, blob_oid)); cl_git_pass(git_treebuilder_new(&builder, repo, NULL)); cl_git_fail(git_treebuilder_insert( &entry, builder, "normalized.txt", &bid, GIT_FILEMODE_BLOB_GROUP_WRITABLE)); git_treebuilder_free(builder); } void test_object_tree_attributes__normalize_attributes_when_creating_a_tree_from_an_existing_one(void) { git_treebuilder *builder; git_oid tid, tid2; git_tree *tree; const git_tree_entry *entry; cl_git_pass(git_oid_fromstr(&tid, tree_oid)); cl_git_pass(git_tree_lookup(&tree, repo, &tid)); cl_git_pass(git_treebuilder_new(&builder, repo, tree)); entry = git_treebuilder_get(builder, "old_mode.txt"); cl_assert(entry != NULL); cl_assert_equal_i( GIT_FILEMODE_BLOB, git_tree_entry_filemode(entry)); cl_git_pass(git_treebuilder_write(&tid2, builder)); git_treebuilder_free(builder); git_tree_free(tree); cl_git_pass(git_tree_lookup(&tree, repo, &tid2)); entry = git_tree_entry_byname(tree, "old_mode.txt"); cl_assert(entry != NULL); cl_assert_equal_i( GIT_FILEMODE_BLOB, git_tree_entry_filemode(entry)); git_tree_free(tree); } void test_object_tree_attributes__normalize_600(void) { git_oid id; git_tree *tree; const git_tree_entry *entry; git_oid_fromstr(&id, "0810fb7818088ff5ac41ee49199b51473b1bd6c7"); cl_git_pass(git_tree_lookup(&tree, repo, &id)); entry = git_tree_entry_byname(tree, "ListaTeste.xml"); cl_assert_equal_i(git_tree_entry_filemode(entry), GIT_FILEMODE_BLOB); cl_assert_equal_i(git_tree_entry_filemode_raw(entry), 0100600); git_tree_free(tree); }