diff --git a/tests-clay/clay.h b/tests-clay/clay.h index bdb11e8ad..3f09d4f06 100644 --- a/tests-clay/clay.h +++ b/tests-clay/clay.h @@ -129,6 +129,9 @@ extern void test_network_remotes__initialize(void); extern void test_network_remotes__parsing(void); extern void test_network_remotes__refspec_parsing(void); extern void test_network_remotes__transform(void); +extern void test_object_commit_commitstagedfile__cleanup(void); +extern void test_object_commit_commitstagedfile__generate_predictable_object_ids(void); +extern void test_object_commit_commitstagedfile__initialize(void); extern void test_object_raw_chars__build_valid_oid_from_raw_bytes(void); extern void test_object_raw_chars__find_invalid_chars_in_oid(void); extern void test_object_raw_compare__compare_allocfmt_oids(void); @@ -159,9 +162,6 @@ extern void test_object_raw_size__validate_oid_size(void); extern void test_object_raw_type2string__check_type_is_loose(void); extern void test_object_raw_type2string__convert_string_to_type(void); extern void test_object_raw_type2string__convert_type_to_string(void); -extern void test_object_tree_buildfromindex__cleanup(void); -extern void test_object_tree_buildfromindex__generate_predictable_object_ids(void); -extern void test_object_tree_buildfromindex__initialize(void); extern void test_object_tree_diff__addition(void); extern void test_object_tree_diff__cleanup(void); extern void test_object_tree_diff__deletion(void); diff --git a/tests-clay/clay_main.c b/tests-clay/clay_main.c index 93e15f405..ce3b66b87 100644 --- a/tests-clay/clay_main.c +++ b/tests-clay/clay_main.c @@ -200,6 +200,9 @@ static const struct clay_func _clay_cb_network_remotes[] = { {"refspec_parsing", &test_network_remotes__refspec_parsing}, {"transform", &test_network_remotes__transform} }; +static const struct clay_func _clay_cb_object_commit_commitstagedfile[] = { + {"generate_predictable_object_ids", &test_object_commit_commitstagedfile__generate_predictable_object_ids} +}; static const struct clay_func _clay_cb_object_raw_chars[] = { {"build_valid_oid_from_raw_bytes", &test_object_raw_chars__build_valid_oid_from_raw_bytes}, {"find_invalid_chars_in_oid", &test_object_raw_chars__find_invalid_chars_in_oid} @@ -246,9 +249,6 @@ static const struct clay_func _clay_cb_object_raw_type2string[] = { {"convert_string_to_type", &test_object_raw_type2string__convert_string_to_type}, {"convert_type_to_string", &test_object_raw_type2string__convert_type_to_string} }; -static const struct clay_func _clay_cb_object_tree_buildfromindex[] = { - {"generate_predictable_object_ids", &test_object_tree_buildfromindex__generate_predictable_object_ids} -}; static const struct clay_func _clay_cb_object_tree_diff[] = { {"addition", &test_object_tree_diff__addition}, {"deletion", &test_object_tree_diff__deletion}, @@ -398,6 +398,12 @@ static const struct clay_suite _clay_suites[] = { {"initialize", &test_network_remotes__initialize}, {"cleanup", &test_network_remotes__cleanup}, _clay_cb_network_remotes, 4 + }, + { + "object::commit::commitstagedfile", + {"initialize", &test_object_commit_commitstagedfile__initialize}, + {"cleanup", &test_object_commit_commitstagedfile__cleanup}, + _clay_cb_object_commit_commitstagedfile, 1 }, { "object::raw::chars", @@ -446,12 +452,6 @@ static const struct clay_suite _clay_suites[] = { {NULL, NULL}, {NULL, NULL}, _clay_cb_object_raw_type2string, 3 - }, - { - "object::tree::buildfromindex", - {"initialize", &test_object_tree_buildfromindex__initialize}, - {"cleanup", &test_object_tree_buildfromindex__cleanup}, - _clay_cb_object_tree_buildfromindex, 1 }, { "object::tree::diff", diff --git a/tests-clay/object/commit/commitstagedfile.c b/tests-clay/object/commit/commitstagedfile.c new file mode 100644 index 000000000..b6730052c --- /dev/null +++ b/tests-clay/object/commit/commitstagedfile.c @@ -0,0 +1,118 @@ +#include "clay_libgit2.h" +#include "posix.h" + +static git_repository *repo; + +static void file_create(const char *filename, const char *content) +{ + int fd; + + fd = p_creat(filename, 0666); + cl_assert(fd != 0); + cl_git_pass(p_write(fd, content, strlen(content))); + cl_git_pass(p_close(fd)); +} + +void test_object_commit_commitstagedfile__initialize(void) +{ + cl_fixture("treebuilder"); + cl_git_pass(git_repository_init(&repo, "treebuilder/", 0)); + cl_git_pass(git_repository_open(&repo, "treebuilder/.git")); + cl_assert(repo != NULL); +} + +void test_object_commit_commitstagedfile__cleanup(void) +{ + git_repository_free(repo); + cl_fixture_cleanup("treebuilder"); +} + +void test_object_commit_commitstagedfile__generate_predictable_object_ids(void) +{ + git_index *index; + git_index_entry *entry; + git_oid expected_blob_oid, tree_oid, expected_tree_oid, commit_oid, expected_commit_oid; + git_signature *signature; + git_tree *tree; + + /* + * The test below replicates the following git scenario + * + * $ echo "test" > test.txt + * $ git hash-object test.txt + * 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 + * + * $ git add . + * $ git commit -m "Initial commit" + * + * $ git log + * commit 1fe3126578fc4eca68c193e4a3a0a14a0704624d + * Author: nulltoken + * Date: Wed Dec 14 08:29:03 2011 +0100 + * + * Initial commit + * + * $ git show 1fe3 --format=raw + * commit 1fe3126578fc4eca68c193e4a3a0a14a0704624d + * tree 2b297e643c551e76cfa1f93810c50811382f9117 + * author nulltoken 1323847743 +0100 + * committer nulltoken 1323847743 +0100 + * + * Initial commit + * + * diff --git a/test.txt b/test.txt + * new file mode 100644 + * index 0000000..9daeafb + * --- /dev/null + * +++ b/test.txt + * @@ -0,0 +1 @@ + * +test + * + * $ git ls-tree 2b297 + * 100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 test.txt + */ + + cl_git_pass(git_oid_fromstr(&expected_commit_oid, "1fe3126578fc4eca68c193e4a3a0a14a0704624d")); + cl_git_pass(git_oid_fromstr(&expected_tree_oid, "2b297e643c551e76cfa1f93810c50811382f9117")); + cl_git_pass(git_oid_fromstr(&expected_blob_oid, "9daeafb9864cf43055ae93beb0afd6c7d144bfa4")); + + /* + * Add a new file to the index + */ + file_create("treebuilder/test.txt", "test\n"); + cl_git_pass(git_repository_index(&index, repo)); + cl_git_pass(git_index_add(index, "test.txt", 0)); + + entry = git_index_get(index, 0); + + cl_assert(git_oid_cmp(&expected_blob_oid, &entry->oid) == 0); + + /* + * Build the tree from the index + */ + cl_git_pass(git_tree_create_fromindex(&tree_oid, index)); + + cl_assert(git_oid_cmp(&expected_tree_oid, &tree_oid) == 0); + + /* + * Commit the staged file + */ + cl_git_pass(git_signature_new(&signature, "nulltoken", "emeric.fermas@gmail.com", 1323847743, 60)); + cl_git_pass(git_tree_lookup(&tree, repo, &tree_oid)); + cl_git_pass(git_commit_create_v( + &commit_oid, + repo, + "HEAD", + signature, + signature, + NULL, + "Initial commit\n", // Note: the trailing linefeed is mandatory to replicate git behavior + tree, + 0)); + + cl_assert(git_oid_cmp(&expected_commit_oid, &commit_oid) == 0); + + git_signature_free(signature); + git_tree_free(tree); + git_index_free(index); +} diff --git a/tests-clay/object/tree/buildfromindex.c b/tests-clay/object/tree/buildfromindex.c deleted file mode 100644 index d4a52067e..000000000 --- a/tests-clay/object/tree/buildfromindex.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "clay_libgit2.h" -#include "posix.h" - -static git_repository *repo; - -static void file_create(const char *filename, const char *content) -{ - int fd; - - fd = p_creat(filename, 0666); - cl_assert(fd != 0); - cl_git_pass(p_write(fd, content, strlen(content))); - cl_git_pass(p_close(fd)); -} - -void test_object_tree_buildfromindex__initialize(void) -{ - cl_fixture("treebuilder"); - cl_git_pass(git_repository_init(&repo, "treebuilder/", 0)); - cl_git_pass(git_repository_open(&repo, "treebuilder/.git")); - cl_assert(repo != NULL); -} - -void test_object_tree_buildfromindex__cleanup(void) -{ - git_repository_free(repo); - cl_fixture_cleanup("treebuilder"); -} - -void test_object_tree_buildfromindex__generate_predictable_object_ids(void) -{ - git_index *index; - git_oid blob_oid, tree_oid, expected_tree_oid; - git_index_entry *entry; - - /* - * Add a new file to the index - */ - cl_git_pass(git_repository_index(&index, repo)); - - file_create("treebuilder/test.txt", "test\n"); - cl_git_pass(git_index_add(index, "test.txt", 0)); - - entry = git_index_get(index, 0); - - /* $ echo "test" | git hash-object --stdin */ - cl_git_pass(git_oid_fromstr(&blob_oid, "9daeafb9864cf43055ae93beb0afd6c7d144bfa4")); - - cl_assert(git_oid_cmp(&blob_oid, &entry->oid) == 0); - - /* - * Build the tree from the index - */ - cl_git_pass(git_tree_create_fromindex(&tree_oid, index)); - - cl_git_pass(git_oid_fromstr(&expected_tree_oid, "2b297e643c551e76cfa1f93810c50811382f9117")); - cl_assert(git_oid_cmp(&expected_tree_oid, &tree_oid) == 0); - - git_index_free(index); -}