aboutsummaryrefslogtreecommitdiff
path: root/ref/ref.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-21 02:04:15 +0800
committerGravatar Runxi Yu2026-02-21 02:04:15 +0800
commitaf07cfa67b867607912376fbcda842fe7373ebf3 (patch)
tree341bd3b097cb5e21568c013648eb4619d508a683 /ref/ref.go
parentobjectstore: Rename from objectdb (diff)
signatureNo signature
ref: Add Ref, Detached, Symbolic
Diffstat (limited to 'ref/ref.go')
-rw-r--r--ref/ref.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/ref/ref.go b/ref/ref.go
new file mode 100644
index 00000000..9d1fbfc2
--- /dev/null
+++ b/ref/ref.go
@@ -0,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() {}