revparse: Prevent unnecessary odb backend calls

This commit is contained in:
nulltoken 2013-09-07 17:21:41 +02:00
parent 32e4992972
commit a8d67afe42
2 changed files with 16 additions and 6 deletions

View File

@ -115,11 +115,8 @@ static int revparse_lookup_object(
if (error < 0 && error != GIT_ENOTFOUND) if (error < 0 && error != GIT_ENOTFOUND)
return error; return error;
error = maybe_abbrev(object_out, repo, spec); if ((strlen(spec) < GIT_OID_HEXSZ) &&
if (!error) ((error = maybe_abbrev(object_out, repo, spec)) != GIT_ENOTFOUND))
return 0;
if (error < 0 && error != GIT_ENOTFOUND)
return error; return error;
error = maybe_describe(object_out, repo, spec); error = maybe_describe(object_out, repo, spec);

View File

@ -259,3 +259,16 @@ void test_odb_backend_nonrefreshing__readheader_is_invoked_once_on_success(void)
cl_assert_equal_i(1, _fake->read_header_calls); cl_assert_equal_i(1, _fake->read_header_calls);
} }
void test_odb_backend_nonrefreshing__read_is_invoked_once_when_revparsing_a_full_oid(void)
{
git_object *obj;
setup_repository_and_backend(GIT_ENOTFOUND);
cl_git_fail_with(
git_revparse_single(&obj, _repo, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
GIT_ENOTFOUND);
cl_assert_equal_i(1, _fake->read_calls);
}