diff options
| author | 2026-03-03 22:49:24 +0800 | |
|---|---|---|
| committer | 2026-03-03 22:52:47 +0800 | |
| commit | 6378da9dcf8d991a00ee410bb5408231861d90c0 (patch) | |
| tree | 5427fbc11b79a683598c02cdcdc81048423c92f2 /reachability/peel.go | |
| parent | config: Fix lints (diff) | |
| signature | No signature | |
reachability: Refactor v0.1.41
Diffstat (limited to 'reachability/peel.go')
| -rw-r--r-- | reachability/peel.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/reachability/peel.go b/reachability/peel.go new file mode 100644 index 00000000..9df9bb4d --- /dev/null +++ b/reachability/peel.go @@ -0,0 +1,35 @@ +package reachability + +import ( + "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/objectid" + "codeberg.org/lindenii/furgit/objecttype" +) + +func (r *Reachability) peelRootToDomain(id objectid.ObjectID, domain Domain) (objectid.ObjectID, error) { + if err := validateDomain(domain); err != nil { + return objectid.ObjectID{}, err + } + for { + ty, err := r.readHeaderType(id) + if err != nil { + return objectid.ObjectID{}, err + } + if ty != objecttype.TypeTag { + if domain == DomainCommits && ty != objecttype.TypeCommit { + return objectid.ObjectID{}, &ErrObjectType{OID: id, Got: ty, Want: objecttype.TypeCommit} + } + return id, nil + } + + content, err := r.readBytesContent(id) + if err != nil { + return objectid.ObjectID{}, err + } + tag, err := object.ParseTag(content, id.Algorithm()) + if err != nil { + return objectid.ObjectID{}, err + } + id = tag.Target + } +} |
