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