shithub: furgit

Download patch

ref: af07cfa67b867607912376fbcda842fe7373ebf3
parent: e936d246576e8bf714dbf8666e9349a5f22be87e
author: Runxi Yu <me@runxiyu.org>
date: Fri Feb 20 21:04:15 EST 2026

ref: Add Ref, Detached, Symbolic

--- /dev/null
+++ b/ref/ref.go
@@ -1,0 +1,41 @@
+// Package ref provides Git reference models.
+package ref
+
+import "codeberg.org/lindenii/furgit/objectid"
+
+// Ref is a Git reference.
+//
+// Implementations must be in this package.
+type Ref interface {
+	isRef()
+	Name() string
+}
+
+// Detached points directly to an object ID.
+type Detached struct {
+	RefName string
+	ID      objectid.ObjectID
+
+	// Peeled is the peeled target when available (for annotated tags).
+	Peeled *objectid.ObjectID
+}
+
+// Name returns the fully-qualified reference name.
+func (ref Detached) Name() string {
+	return ref.RefName
+}
+
+func (Detached) isRef() {}
+
+// Symbolic points to another reference name.
+type Symbolic struct {
+	RefName string
+	Target  string
+}
+
+// Name returns the fully-qualified reference name.
+func (ref Symbolic) Name() string {
+	return ref.RefName
+}
+
+func (Symbolic) isRef() {}
--