Commit ae49719a by Vicent Martí

Merge pull request #1835 from libgit2/ntk/fix/less_backend_calls_on_revparsing

Some revparse love
parents 32e49929 1634df8c
......@@ -93,11 +93,7 @@ static int revparse_lookup_object(
int error;
git_reference *ref;
error = maybe_sha(object_out, repo, spec);
if (!error)
return 0;
if (error < 0 && error != GIT_ENOTFOUND)
if ((error = maybe_sha(object_out, repo, spec)) != GIT_ENOTFOUND)
return error;
error = git_reference_dwim(&ref, repo, spec);
......@@ -112,21 +108,14 @@ static int revparse_lookup_object(
return error;
}
if (error < 0 && error != GIT_ENOTFOUND)
if (error != GIT_ENOTFOUND)
return error;
error = maybe_abbrev(object_out, repo, spec);
if (!error)
return 0;
if (error < 0 && error != GIT_ENOTFOUND)
if ((strlen(spec) < GIT_OID_HEXSZ) &&
((error = maybe_abbrev(object_out, repo, spec)) != GIT_ENOTFOUND))
return error;
error = maybe_describe(object_out, repo, spec);
if (!error)
return 0;
if (error < 0 && error != GIT_ENOTFOUND)
if ((error = maybe_describe(object_out, repo, spec)) != GIT_ENOTFOUND)
return error;
giterr_set(GITERR_REFERENCE, "Revspec '%s' not found.", spec);
......
......@@ -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);
}
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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment