mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 07:41:33 +00:00 
			
		
		
		
	git_odb_expand_ids: rename func, return the type
This commit is contained in:
		
							parent
							
								
									6c04269c8f
								
							
						
					
					
						commit
						4b1f0f79ac
					
				| @ -175,11 +175,12 @@ GIT_EXTERN(int) git_odb_exists_prefix( | ||||
| 
 | ||||
| /**
 | ||||
|  * Determine if one or more objects can be found in the object database | ||||
|  * by their abbreviated object IDs.  Callers may further restrict the | ||||
|  * lookup based on type.  This function will write the complete object | ||||
|  * ID to the `id`s array, and the updated length to the `id_lengths` | ||||
|  * array.  (If an object is found, it will have its length updated to | ||||
|  * `GIT_OID_HEXSZ`; if an object is not found, will be be `0`.) | ||||
|  * by their abbreviated object ID and type.  The given array will be | ||||
|  * updated in place:  for each abbreviated ID that is unique in the | ||||
|  * database, and of the given type (if specified), the full object ID, | ||||
|  * object ID length (`GIT_OID_HEXSZ`) and type will be written back to | ||||
|  * the array.  For IDs that are not found (or are ambiguous), the | ||||
|  * array entry will be zeroed. | ||||
|  * | ||||
|  * Note that since this function operates on multiple objects, the | ||||
|  * underlying database will not be asked to be reloaded if an object is | ||||
| @ -194,7 +195,7 @@ GIT_EXTERN(int) git_odb_exists_prefix( | ||||
|  * @param cnt The length of the `ids`, `id_lengths` and `types` arrays | ||||
|  * @return 0 on success or an error code on failure | ||||
|  */ | ||||
| GIT_EXTERN(int) git_odb_exists_many_prefixes( | ||||
| GIT_EXTERN(int) git_odb_expand_ids( | ||||
| 	git_odb *db, | ||||
| 	git_oid *ids, | ||||
| 	size_t *id_lengths, | ||||
|  | ||||
							
								
								
									
										16
									
								
								src/odb.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/odb.c
									
									
									
									
									
								
							| @ -742,7 +742,7 @@ int git_odb_exists_prefix( | ||||
| 	return error; | ||||
| } | ||||
| 
 | ||||
| int git_odb_exists_many_prefixes( | ||||
| int git_odb_expand_ids( | ||||
| 	git_odb *db, | ||||
| 	git_oid *ids, | ||||
| 	size_t *id_lengths, | ||||
| @ -773,7 +773,7 @@ int git_odb_exists_many_prefixes( | ||||
| 			if (!error) { | ||||
| 				actual_id = &tmp; | ||||
| 
 | ||||
| 				if (types && types[i] != GIT_OBJ_ANY) | ||||
| 				if (types) | ||||
| 					error = git_odb_read_header(&len, &actual_type, db, &tmp); | ||||
| 				else | ||||
| 					actual_type = GIT_OBJ_ANY; | ||||
| @ -789,13 +789,19 @@ int git_odb_exists_many_prefixes( | ||||
| 			actual_type = 0; | ||||
| 
 | ||||
| 		if (!actual_type) { | ||||
| 			id_lengths[i] = 0; | ||||
| 			memset(&ids[i], 0, sizeof(git_oid)); | ||||
| 		} else { | ||||
| 			id_lengths[i] = GIT_OID_HEXSZ; | ||||
| 			id_lengths[i] = 0; | ||||
| 
 | ||||
| 			if (types) | ||||
| 				types[i] = 0; | ||||
| 		} else { | ||||
| 			if (actual_id) | ||||
| 				git_oid_cpy(&ids[i], actual_id); | ||||
| 
 | ||||
| 			id_lengths[i] = GIT_OID_HEXSZ; | ||||
| 
 | ||||
| 			if (types) | ||||
| 				types[i] = actual_type; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -109,13 +109,13 @@ void test_odb_mixed__dup_oid_prefix_0(void) { | ||||
| 	git_odb_object_free(obj); | ||||
| } | ||||
| 
 | ||||
| struct odb_test_data { | ||||
| struct expand_id_test_data { | ||||
| 	char *lookup_id; | ||||
| 	char *expected_id; | ||||
| 	git_otype expected_type; | ||||
| }; | ||||
| 
 | ||||
| struct odb_test_data prefix_data[] = { | ||||
| struct expand_id_test_data expand_id_test_data[] = { | ||||
| 	/* some prefixes and their expected values */ | ||||
| 	{ "dea509d0",  NULL, GIT_OBJ_ANY }, | ||||
| 	{ "00000000",  NULL, GIT_OBJ_ANY }, | ||||
| @ -155,16 +155,16 @@ static void setup_prefix_query( | ||||
| 	git_otype *types; | ||||
| 	size_t num, *lengths, i; | ||||
| 
 | ||||
| 	num = ARRAY_SIZE(prefix_data); | ||||
| 	num = ARRAY_SIZE(expand_id_test_data); | ||||
| 
 | ||||
| 	cl_assert((ids = git__calloc(num, sizeof(git_oid)))); | ||||
| 	cl_assert((lengths = git__calloc(num, sizeof(size_t)))); | ||||
| 	cl_assert((types = git__calloc(num, sizeof(git_otype)))); | ||||
| 
 | ||||
| 	for (i = 0; i < num; i++) { | ||||
| 		lengths[i] = strlen(prefix_data[i].lookup_id); | ||||
| 		git_oid_fromstrn(&ids[i], prefix_data[i].lookup_id, lengths[i]); | ||||
| 		types[i] = prefix_data[i].expected_type; | ||||
| 		lengths[i] = strlen(expand_id_test_data[i].lookup_id); | ||||
| 		git_oid_fromstrn(&ids[i], expand_id_test_data[i].lookup_id, lengths[i]); | ||||
| 		types[i] = expand_id_test_data[i].expected_type; | ||||
| 	} | ||||
| 
 | ||||
| 	*out_ids = ids; | ||||
| @ -173,40 +173,50 @@ static void setup_prefix_query( | ||||
| 	*out_num = num; | ||||
| } | ||||
| 
 | ||||
| static void assert_found_objects(git_oid *ids, size_t *lengths) | ||||
| static void assert_found_objects( | ||||
| 	git_oid *ids, size_t *lengths, git_otype *types) | ||||
| { | ||||
| 	size_t num, i; | ||||
| 
 | ||||
| 	num = ARRAY_SIZE(prefix_data); | ||||
| 	num = ARRAY_SIZE(expand_id_test_data); | ||||
| 
 | ||||
| 	for (i = 0; i < num; i++) { | ||||
| 		git_oid expected_id = {{0}}; | ||||
| 		size_t expected_len = 0; | ||||
| 		git_otype expected_type = 0; | ||||
| 
 | ||||
| 		if (prefix_data[i].expected_id) { | ||||
| 			git_oid_fromstr(&expected_id, prefix_data[i].expected_id); | ||||
| 		if (expand_id_test_data[i].expected_id) { | ||||
| 			git_oid_fromstr(&expected_id, expand_id_test_data[i].expected_id); | ||||
| 			expected_len = GIT_OID_HEXSZ; | ||||
| 			expected_type = expand_id_test_data[i].expected_type; | ||||
| 		} | ||||
| 
 | ||||
| 		cl_assert_equal_i(expected_len, lengths[i]); | ||||
| 		cl_assert_equal_oid(&expected_id, &ids[i]); | ||||
| 
 | ||||
| 		if (types) | ||||
| 			cl_assert_equal_i(expected_type, types[i]); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void assert_notfound_objects(git_oid *ids, size_t *lengths) | ||||
| static void assert_notfound_objects( | ||||
| 	git_oid *ids, size_t *lengths, git_otype *types) | ||||
| { | ||||
| 	git_oid expected_id = {{0}}; | ||||
| 	size_t num, i; | ||||
| 
 | ||||
| 	num = ARRAY_SIZE(prefix_data); | ||||
| 	num = ARRAY_SIZE(expand_id_test_data); | ||||
| 
 | ||||
| 	for (i = 0; i < num; i++) { | ||||
| 		cl_assert_equal_i(0, lengths[i]); | ||||
| 		cl_assert_equal_oid(&expected_id, &ids[i]); | ||||
| 
 | ||||
| 		if (types) | ||||
| 			cl_assert_equal_i(0, types[i]); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void test_odb_mixed__prefix_many(void) | ||||
| void test_odb_mixed__expand_ids(void) | ||||
| { | ||||
| 	git_oid *ids; | ||||
| 	size_t i, num, *lengths; | ||||
| @ -215,15 +225,15 @@ void test_odb_mixed__prefix_many(void) | ||||
| 	/* test looking for the actual (correct) types */ | ||||
| 
 | ||||
| 	setup_prefix_query(&ids, &lengths, &types, &num); | ||||
| 	cl_git_pass(git_odb_exists_many_prefixes(_odb, ids, lengths, types, num)); | ||||
| 	assert_found_objects(ids, lengths); | ||||
| 	cl_git_pass(git_odb_expand_ids(_odb, ids, lengths, types, num)); | ||||
| 	assert_found_objects(ids, lengths, types); | ||||
| 	git__free(ids); git__free(lengths); git__free(types); | ||||
| 
 | ||||
| 	/* test looking for no specified types (types array == NULL) */ | ||||
| 
 | ||||
| 	setup_prefix_query(&ids, &lengths, &types, &num); | ||||
| 	cl_git_pass(git_odb_exists_many_prefixes(_odb, ids, lengths, NULL, num)); | ||||
| 	assert_found_objects(ids, lengths); | ||||
| 	cl_git_pass(git_odb_expand_ids(_odb, ids, lengths, NULL, num)); | ||||
| 	assert_found_objects(ids, lengths, NULL); | ||||
| 	git__free(ids); git__free(lengths); git__free(types); | ||||
| 
 | ||||
| 	/* test looking for an explicit GIT_OBJ_ANY */ | ||||
| @ -233,8 +243,8 @@ void test_odb_mixed__prefix_many(void) | ||||
| 	for (i = 0; i < num; i++) | ||||
| 		types[i] = GIT_OBJ_ANY; | ||||
| 
 | ||||
| 	cl_git_pass(git_odb_exists_many_prefixes(_odb, ids, lengths, types, num)); | ||||
| 	assert_found_objects(ids, lengths); | ||||
| 	cl_git_pass(git_odb_expand_ids(_odb, ids, lengths, types, num)); | ||||
| 	assert_found_objects(ids, lengths, types); | ||||
| 	git__free(ids); git__free(lengths); git__free(types); | ||||
| 
 | ||||
| 	/* test looking for the completely wrong type */ | ||||
| @ -244,8 +254,8 @@ void test_odb_mixed__prefix_many(void) | ||||
| 	for (i = 0; i < num; i++) | ||||
| 		types[i] = (types[i] == GIT_OBJ_BLOB) ? GIT_OBJ_TREE : GIT_OBJ_BLOB; | ||||
| 
 | ||||
| 	cl_git_pass(git_odb_exists_many_prefixes(_odb, ids, lengths, types, num)); | ||||
| 	assert_notfound_objects(ids, lengths); | ||||
| 	cl_git_pass(git_odb_expand_ids(_odb, ids, lengths, types, num)); | ||||
| 	assert_notfound_objects(ids, lengths, types); | ||||
| 	git__free(ids); git__free(lengths); git__free(types); | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Edward Thomson
						Edward Thomson