void git_object_free(git_object *object) { if (object == NULL) return; git_object__source_close(object); git_hashtable_remove(object->repo->objects, &object->id); switch (object->source.raw.type) { case GIT_OBJ_COMMIT: git_commit__free((git_commit *)object); break; case GIT_OBJ_TREE: git_tree__free((git_tree *)object); break; case GIT_OBJ_TAG: git_tag__free((git_tag *)object); break; case GIT_OBJ_BLOB: git_blob__free((git_blob *)object); break; default: free(object); break; } }
void git_object__free(git_object *object) { assert(object); git_object__source_close(object); switch (object->source.raw.type) { case GIT_OBJ_COMMIT: git_commit__free((git_commit *)object); break; case GIT_OBJ_TREE: git_tree__free((git_tree *)object); break; case GIT_OBJ_TAG: git_tag__free((git_tag *)object); break; case GIT_OBJ_BLOB: git_blob__free((git_blob *)object); break; default: free(object); break; } }
void git_object__free(void *_obj) { git_object *object = (git_object *)_obj; assert(object); switch (object->type) { case GIT_OBJ_COMMIT: git_commit__free((git_commit *)object); break; case GIT_OBJ_TREE: git_tree__free((git_tree *)object); break; case GIT_OBJ_TAG: git_tag__free((git_tag *)object); break; case GIT_OBJ_BLOB: git_blob__free((git_blob *)object); break; default: git__free(object); break; } }
void assert_commit_summary(const char *expected, const char *given) { git_commit *dummy; cl_assert(dummy = git__calloc(1, sizeof(struct git_commit))); dummy->raw_message = git__strdup(given); cl_assert_equal_s(expected, git_commit_summary(dummy)); git_commit__free(dummy); }
void test_commit_parse__entire_commit(void) { const int broken_commit_count = sizeof(failing_commit_cases) / sizeof(*failing_commit_cases); const int working_commit_count = sizeof(passing_commit_cases) / sizeof(*passing_commit_cases); int i; for (i = 0; i < broken_commit_count; ++i) { git_commit *commit; commit = (git_commit*)git__malloc(sizeof(git_commit)); memset(commit, 0x0, sizeof(git_commit)); commit->object.repo = g_repo; cl_git_fail(git_commit__parse_buffer( commit, failing_commit_cases[i], strlen(failing_commit_cases[i])) ); git_commit__free(commit); } for (i = 0; i < working_commit_count; ++i) { git_commit *commit; commit = (git_commit*)git__malloc(sizeof(git_commit)); memset(commit, 0x0, sizeof(git_commit)); commit->object.repo = g_repo; cl_git_pass(git_commit__parse_buffer( commit, passing_commit_cases[i], strlen(passing_commit_cases[i])) ); if (!i) cl_assert_equal_s("\n", git_commit_message(commit)); else cl_assert(git__prefixcmp( git_commit_message(commit), "a simple commit which works") == 0); git_commit__free(commit); } }