aboutsummaryrefslogtreecommitdiff
path: root/commitquery/query_resolve_commitish.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-29 15:00:06 +0000
committerGravatar Runxi Yu2026-03-29 15:00:06 +0000
commitecdae2b758ef6849222525c941574bbac13ea85c (patch)
tree11cce1a18e8d1384aa2c425ad4fc204d0349ff9a /commitquery/query_resolve_commitish.go
parentcommitquery: Reorganize (diff)
signatureNo signature
commitquery: Use fetcher
Diffstat (limited to 'commitquery/query_resolve_commitish.go')
-rw-r--r--commitquery/query_resolve_commitish.go35
1 files changed, 29 insertions, 6 deletions
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,
+ }
+ }
+ }
}