static void test_read_header(object_data *data) { git_oid id; git_odb *odb; size_t len; git_object_t type; write_object_files(data); cl_git_pass(git_odb_open(&odb, "test-objects")); cl_git_pass(git_oid_fromstr(&id, data->id)); cl_git_pass(git_odb_read_header(&len, &type, odb, &id)); cl_assert_equal_sz(data->dlen, len); cl_assert_equal_i(git_object_string2type(data->type), type); git_odb_free(odb); }
void test_odb_largefiles__read_header(void) { git_oid oid; size_t len; git_otype type; #ifndef GIT_ARCH_64 cl_skip(); #endif if (!cl_is_env_set("GITTEST_INVASIVE_FS_SIZE") || !cl_is_env_set("GITTEST_SLOW")) cl_skip(); writefile(&oid); cl_git_pass(git_odb_read_header(&len, &type, odb, &oid)); cl_assert_equal_sz(LARGEFILE_SIZE, len); cl_assert_equal_i(GIT_OBJ_BLOB, type); }
void test_odb_packed__read_header_0(void) { unsigned int i; for (i = 0; i < ARRAY_SIZE(packed_objects); ++i) { git_oid id; git_odb_object *obj; size_t len; git_object_t type; cl_git_pass(git_oid_fromstr(&id, packed_objects[i])); cl_git_pass(git_odb_read(&obj, _odb, &id)); cl_git_pass(git_odb_read_header(&len, &type, _odb, &id)); cl_assert(obj->cached.size == len); cl_assert(obj->cached.type == type); git_odb_object_free(obj); } }
void test_odb_packed__read_header_1(void) { unsigned int i; for (i = 0; i < ARRAY_SIZE(loose_objects); ++i) { git_oid id; git_odb_object *obj; size_t len; git_otype type; cl_git_pass(git_oid_fromstr(&id, loose_objects[i])); cl_assert(git_odb_exists(_odb, &id) == 1); cl_git_pass(git_odb_read(&obj, _odb, &id)); cl_git_pass(git_odb_read_header(&len, &type, _odb, &id)); cl_assert(obj->raw.len == len); cl_assert(obj->raw.type == type); git_odb_object_free(obj); } }
bool git_object__is_valid( git_repository *repo, const git_oid *id, git_otype expected_type) { git_odb *odb; git_otype actual_type; size_t len; int error; if (!git_object__strict_input_validation) return true; if ((error = git_repository_odb__weakptr(&odb, repo)) < 0 || (error = git_odb_read_header(&len, &actual_type, odb, id)) < 0) return false; if (expected_type != GIT_OBJ_ANY && expected_type != actual_type) { giterr_set(GITERR_INVALID, "the requested type does not match the type in the ODB"); return false; } return true; }