ref: 3ce59c3248dec0eb0f918c42f37f53bc2ac20425
parent: 23224b2383c15a5829904365a6e722ae2f1da1a7
author: Runxi Yu <runxiyu@umich.edu>
date: Mon Mar 30 23:17:56 EDT 2026
commitquery: Error handling cleanup after the fetcher port Still a few weird parts, but I forgot what those helpers were for, and the semantics were a bit awkward... will check later™
--- a/commitquery/query_load_by_oid.go
+++ b/commitquery/query_load_by_oid.go
@@ -3,11 +3,7 @@
import (
stderrors "errors"
- giterrors "codeberg.org/lindenii/furgit/errors"
commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read"
- "codeberg.org/lindenii/furgit/object/commit"
- objectstore "codeberg.org/lindenii/furgit/object/store"
- objecttype "codeberg.org/lindenii/furgit/object/type"
)
// loadByOID populates one node from an object ID.
@@ -25,34 +21,21 @@
}
}
- obj, err := query.fetcher.ExactObject(id)
+ commit, err := query.fetcher.ExactCommit(id)
if err != nil {- if stderrors.Is(err, objectstore.ErrObjectNotFound) {- return &giterrors.ObjectMissingError{OID: id}- }
-
return err
}
- commitObj, ok := obj.Object().(*commit.Commit)
- if !ok {- return &giterrors.ObjectTypeError{- OID: id,
- Got: obj.Object().ObjectType(),
- Want: objecttype.TypeCommit,
- }
- }
-
- parents := make([]parentRef, 0, len(commitObj.Parents))
- for _, parentID := range commitObj.Parents {+ parents := make([]parentRef, 0, len(commit.Object().Parents))
+ for _, parentID := range commit.Object().Parents { parents = append(parents, parentRef{ID: parentID})}
- commit := commitData{+ commitData := commitData{ID: id,
Parents: parents,
- CommitTime: commitObj.Committer.WhenUnix,
+ CommitTime: commit.Object().Committer.WhenUnix,
}
- return query.populateNode(idx, commit)
+ return query.populateNode(idx, commitData)
}
--- a/commitquery/query_resolve_commitish.go
+++ b/commitquery/query_resolve_commitish.go
@@ -1,39 +1,13 @@
package commitquery
-import (
- stderrors "errors"
+import objectid "codeberg.org/lindenii/furgit/object/id"
- 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) {- for {- obj, err := query.fetcher.ExactObject(id)
- if err != nil {- if stderrors.Is(err, objectstore.ErrObjectNotFound) {- return 0, &giterrors.ObjectMissingError{OID: id}- }
-
- 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,
- }
- }
+ id, err := query.fetcher.PeelToCommitID(id)
+ if err != nil {+ return 0, err
}
+
+ return query.resolveOID(id)
}
--
⑨