1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00
any-sync/commonspace/object/tree/objecttree/historytree.go
2023-01-18 08:07:47 +01:00

44 lines
890 B
Go

package objecttree
import "errors"
var ErrLoadBeforeRoot = errors.New("can't load before root")
type HistoryTree interface {
RWLocker
Id() string
Root() *Change
Heads() []string
IterateFrom(id string, convert ChangeConvertFunc, iterate ChangeIterateFunc) error
GetChange(string) (*Change, error)
}
type historyTree struct {
*objectTree
}
func (h *historyTree) rebuildFromStorage(beforeId string, include bool) (err error) {
ot := h.objectTree
ot.treeBuilder.Reset()
if beforeId == ot.Id() && !include {
return ErrLoadBeforeRoot
}
heads := []string{beforeId}
if beforeId == "" {
heads, err = ot.treeStorage.Heads()
if err != nil {
return
}
} else if !include {
beforeChange, err := ot.treeBuilder.loadChange(beforeId)
if err != nil {
return err
}
heads = beforeChange.PreviousIds
}
ot.tree, err = ot.treeBuilder.build(heads, nil, nil)
return
}