package memory import objectid "codeberg.org/lindenii/furgit/object/id" // Because the public one includes the ref's name/identity. type storedKind uint8 const ( storedMissing storedKind = iota storedDetached storedSymbolic ) // Missing is obviously not the best design // but it does make it easier to operate on internally. // Might make a tagged union wrapper, though... // Or might just make a wrapper struct that has an "ok" bool. type storedRef struct { kind storedKind id objectid.ObjectID target string peeled *objectid.ObjectID } func cloneStoredRef(stored storedRef) storedRef { if stored.peeled == nil { return stored } peeled := *stored.peeled stored.peeled = &peeled return stored } func cloneRefs(refs map[string]storedRef) map[string]storedRef { cloned := make(map[string]storedRef, len(refs)) for name, stored := range refs { cloned[name] = cloneStoredRef(stored) } return cloned }