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() {}--
⑨