blob: a9ad8bb5e57bc821145cd4da4e7f9263b529343c (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package commitquery
import (
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) {
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,
}
}
}
}
|