mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 17:05:49 +00:00
odb: Teach loose backend to return EAMBIGUOUS
This commit is contained in:
parent
d0cd6c427a
commit
209f9b67c4
@ -499,7 +499,7 @@ static int fn_locate_object_short_oid(void *state, git_buf *pathbuf) {
|
||||
}
|
||||
|
||||
if (sstate->found > 1)
|
||||
return git_odb__error_ambiguous("multiple matches in loose objects");
|
||||
return GIT_EAMBIGUOUS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -545,12 +545,16 @@ static int locate_object_short_oid(
|
||||
/* Explore directory to find a unique object matching short_oid */
|
||||
error = git_path_direach(
|
||||
object_location, fn_locate_object_short_oid, &state);
|
||||
if (error)
|
||||
|
||||
if (error && error != GIT_EUSER)
|
||||
return error;
|
||||
|
||||
if (!state.found)
|
||||
return git_odb__error_notfound("no matching loose object for prefix", short_oid);
|
||||
|
||||
if (state.found > 1)
|
||||
return git_odb__error_ambiguous("multiple matches in loose objects");
|
||||
|
||||
/* Convert obtained hex formatted oid to raw */
|
||||
error = git_oid_fromstr(res_oid, (char *)state.res_oid);
|
||||
if (error)
|
||||
|
@ -544,6 +544,37 @@ void test_refs_revparse__a_too_short_objectid_returns_EAMBIGUOUS(void)
|
||||
GIT_EAMBIGUOUS, git_revparse_single(&g_obj, g_repo, "e90"));
|
||||
}
|
||||
|
||||
/*
|
||||
* $ echo "aabqhq" | git hash-object -t blob --stdin
|
||||
* dea509d0b3cb8ee0650f6ca210bc83f4678851ba
|
||||
*
|
||||
* $ echo "aaazvc" | git hash-object -t blob --stdin
|
||||
* dea509d097ce692e167dfc6a48a7a280cc5e877e
|
||||
*/
|
||||
void test_refs_revparse__a_not_precise_enough_objectid_returns_EAMBIGUOUS(void)
|
||||
{
|
||||
git_repository *repo;
|
||||
git_index *index;
|
||||
git_object *obj;
|
||||
|
||||
repo = cl_git_sandbox_init("testrepo");
|
||||
|
||||
cl_git_mkfile("testrepo/one.txt", "aabqhq\n");
|
||||
cl_git_mkfile("testrepo/two.txt", "aaazvc\n");
|
||||
|
||||
cl_git_pass(git_repository_index(&index, repo));
|
||||
cl_git_pass(git_index_add_bypath(index, "one.txt"));
|
||||
cl_git_pass(git_index_add_bypath(index, "two.txt"));
|
||||
|
||||
cl_git_fail_with(git_revparse_single(&obj, repo, "dea509d0"), GIT_EAMBIGUOUS);
|
||||
|
||||
cl_git_pass(git_revparse_single(&obj, repo, "dea509d09"));
|
||||
|
||||
git_object_free(obj);
|
||||
git_index_free(index);
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
void test_refs_revparse__issue_994(void)
|
||||
{
|
||||
git_repository *repo;
|
||||
|
Loading…
Reference in New Issue
Block a user