diff options
-rw-r--r-- | src/revparse.c | 9 | ||||
-rw-r--r-- | tests-clar/odb/backend/nonrefreshing.c | 13 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/revparse.c b/src/revparse.c index 329b96dbc..05ddc6c35 100644 --- a/src/revparse.c +++ b/src/revparse.c @@ -115,12 +115,9 @@ static int revparse_lookup_object( if (error < 0 && error != GIT_ENOTFOUND) return error; - error = maybe_abbrev(object_out, repo, spec); - if (!error) - return 0; - - if (error < 0 && error != GIT_ENOTFOUND) - return error; + 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) diff --git a/tests-clar/odb/backend/nonrefreshing.c b/tests-clar/odb/backend/nonrefreshing.c index 9abca2bd3..b43529479 100644 --- a/tests-clar/odb/backend/nonrefreshing.c +++ b/tests-clar/odb/backend/nonrefreshing.c @@ -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); +} |