mesh-issues: carry each value the issues bucket kept, read through the runtime's history, so the log begins with all the bucket still knew (hq ADR 0300 §6, ADR 0307)
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate pass: builds mesh-issues → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate pass: builds mesh-issues → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
This commit is contained in:
@@ -86,14 +86,29 @@ func (m *memory) write(state, key string, value any, check func(Entry, bool) boo
|
||||
return m.rev, nil
|
||||
}
|
||||
|
||||
// History is every value the key still keeps, oldest first.
|
||||
func (m *memory) History(state, key string) ([]Entry, error) {
|
||||
// History is every value the key still keeps, oldest first, as the SDK's State(...).History answers it: puts and
|
||||
// deletes, empty for a key that keeps nothing.
|
||||
func (m *memory) History(state, key string) ([]stdio.StateRevision, error) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
if _, ok := m.data[state][key]; !ok {
|
||||
return nil, nil
|
||||
out := []stdio.StateRevision{}
|
||||
for _, e := range m.hist[state][key] {
|
||||
op, value := "put", e.Value
|
||||
if e.Value == nil {
|
||||
op = "delete"
|
||||
}
|
||||
out = append(out, stdio.StateRevision{Key: key, Value: value, Revision: e.Revision, Op: op})
|
||||
}
|
||||
return append([]Entry(nil), m.hist[state][key]...), nil
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// deleteKey deletes a key, keeping the deletion among its values as the bucket does.
|
||||
func (m *memory) deleteKey(state, key string) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
delete(m.data[state], key)
|
||||
m.rev++
|
||||
m.hist[state][key] = append(m.hist[state][key], Entry{Revision: m.rev})
|
||||
}
|
||||
|
||||
// empty takes every key out of a state, as an emptied bucket.
|
||||
|
||||
Reference in New Issue
Block a user