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); } }
int git_commit_parse_existing(git_commit *commit) { int error = 0; git_obj commit_obj; if (commit->parsed) return 0; error = git_odb_read(&commit_obj, commit->object.pool->db, &commit->object.id); if (error < 0) return error; if (commit_obj.type != GIT_OBJ_COMMIT) { error = GIT_EOBJTYPE; goto cleanup; } error = git_commit__parse_buffer(commit, commit_obj.data, commit_obj.len); cleanup: git_obj_close(&commit_obj); return error; }
int git_commit__parse(git_commit *commit, git_odb_object *obj) { assert(commit); return git_commit__parse_buffer(commit, obj->raw.data, obj->raw.len); }