mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-05 20:42:32 +00:00
object: make git_object_lookup() return GIT_ENOTFOUND when searching for an existing object by specifying an incorrect type
This fix complements cb0ce16bbe
and cover the following additional use cases
- retrieving an object which has been previously searched, found and cached
- retrieving an object through an non ambiguous abbreviated id
This commit is contained in:
parent
fb49bdf9c7
commit
e28c37761b
@ -109,8 +109,8 @@ int git_object_lookup_prefix(
|
|||||||
if (object != NULL) {
|
if (object != NULL) {
|
||||||
if (type != GIT_OBJ_ANY && type != object->type) {
|
if (type != GIT_OBJ_ANY && type != object->type) {
|
||||||
git_object_free(object);
|
git_object_free(object);
|
||||||
giterr_set(GITERR_INVALID, "The given type does not match the type in ODB");
|
giterr_set(GITERR_ODB, "The given type does not match the type in ODB");
|
||||||
return -1;
|
return GIT_ENOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
*object_out = object;
|
*object_out = object;
|
||||||
|
@ -35,3 +35,29 @@ void test_object_lookup__lookup_nonexisting_returns_enotfound(void)
|
|||||||
cl_assert_equal_i(
|
cl_assert_equal_i(
|
||||||
GIT_ENOTFOUND, git_object_lookup(&object, g_repo, &oid, GIT_OBJ_ANY));
|
GIT_ENOTFOUND, git_object_lookup(&object, g_repo, &oid, GIT_OBJ_ANY));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_object_lookup__lookup_wrong_type_by_abbreviated_id_returns_enotfound(void)
|
||||||
|
{
|
||||||
|
const char *commit = "e90810b";
|
||||||
|
git_oid oid;
|
||||||
|
git_object *object;
|
||||||
|
|
||||||
|
cl_git_pass(git_oid_fromstrn(&oid, commit, strlen(commit)));
|
||||||
|
cl_assert_equal_i(
|
||||||
|
GIT_ENOTFOUND, git_object_lookup_prefix(&object, g_repo, &oid, strlen(commit), GIT_OBJ_TAG));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_object_lookup__lookup_wrong_type_eventually_returns_enotfound(void)
|
||||||
|
{
|
||||||
|
const char *commit = "e90810b8df3e80c413d903f631643c716887138d";
|
||||||
|
git_oid oid;
|
||||||
|
git_object *object;
|
||||||
|
|
||||||
|
cl_git_pass(git_oid_fromstr(&oid, commit));
|
||||||
|
|
||||||
|
cl_git_pass(git_object_lookup(&object, g_repo, &oid, GIT_OBJ_COMMIT));
|
||||||
|
git_object_free(object);
|
||||||
|
|
||||||
|
cl_assert_equal_i(
|
||||||
|
GIT_ENOTFOUND, git_object_lookup(&object, g_repo, &oid, GIT_OBJ_TAG));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user