From ecdae2b758ef6849222525c941574bbac13ea85c Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 29 Mar 2026 15:00:06 +0000 Subject: commitquery: Use fetcher --- commitquery/query_resolve_commitish.go | 35 ++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'commitquery/query_resolve_commitish.go') diff --git a/commitquery/query_resolve_commitish.go b/commitquery/query_resolve_commitish.go index 1b91c8bd..a9ad8bb5 100644 --- a/commitquery/query_resolve_commitish.go +++ b/commitquery/query_resolve_commitish.go @@ -1,16 +1,39 @@ package commitquery import ( - "codeberg.org/lindenii/furgit/internal/peel" + stderrors "errors" + + giterrors "codeberg.org/lindenii/furgit/errors" + "codeberg.org/lindenii/furgit/object/commit" objectid "codeberg.org/lindenii/furgit/object/id" + objectstore "codeberg.org/lindenii/furgit/object/store" + "codeberg.org/lindenii/furgit/object/tag" + objecttype "codeberg.org/lindenii/furgit/object/type" ) // resolveCommitish peels one commit-ish object ID and resolves the commit. func (query *query) resolveCommitish(id objectid.ObjectID) (nodeIndex, error) { - commitID, err := peel.ToCommit(query.store, id) - if err != nil { - return 0, err - } + for { + obj, err := query.fetcher.ExactObject(id) + if err != nil { + if stderrors.Is(err, objectstore.ErrObjectNotFound) { + return 0, &giterrors.ObjectMissingError{OID: id} + } - return query.resolveOID(commitID) + return 0, err + } + + switch parsed := obj.Object().(type) { + case *commit.Commit: + return query.resolveOID(id) + case *tag.Tag: + id = parsed.Target + default: + return 0, &giterrors.ObjectTypeError{ + OID: id, + Got: parsed.ObjectType(), + Want: objecttype.TypeCommit, + } + } + } } -- cgit v1.3.1-10-gc9f91