mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-11 10:18:08 +09:00
GO-3273: update history version api
Signed-off-by: AnastasiaShemyakinskaya <shem98a@mail.ru>
This commit is contained in:
parent
64676816f5
commit
9b0ed4e184
6 changed files with 18 additions and 62 deletions
|
@ -1,28 +0,0 @@
|
|||
package exporter
|
||||
|
||||
import (
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/liststorage"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage"
|
||||
)
|
||||
|
||||
type TreeImportParams struct {
|
||||
ListStorage liststorage.ListStorage
|
||||
TreeStorage treestorage.TreeStorage
|
||||
BeforeId string
|
||||
IncludeBeforeId bool
|
||||
}
|
||||
|
||||
func ImportHistoryTree(params TreeImportParams) (tree objecttree.ReadableObjectTree, err error) {
|
||||
aclList, err := list.BuildAclList(params.ListStorage, list.NoOpAcceptorVerifier{})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return objecttree.BuildNonVerifiableHistoryTree(objecttree.HistoryTreeParams{
|
||||
TreeStorage: params.TreeStorage,
|
||||
AclList: aclList,
|
||||
BeforeId: params.BeforeId,
|
||||
IncludeBeforeId: params.IncludeBeforeId,
|
||||
})
|
||||
}
|
|
@ -27,34 +27,25 @@ func (h *historyTree) rebuildFromStorage(params HistoryTreeParams) (err error) {
|
|||
}
|
||||
|
||||
func (h *historyTree) rebuild(params HistoryTreeParams) (err error) {
|
||||
var (
|
||||
beforeId = params.BeforeId
|
||||
include = params.IncludeBeforeId
|
||||
full = params.BuildFullTree
|
||||
)
|
||||
h.treeBuilder.Reset()
|
||||
if full {
|
||||
if len(params.Heads) == 0 {
|
||||
h.tree, err = h.treeBuilder.BuildFull()
|
||||
return
|
||||
}
|
||||
if beforeId == h.Id() && !include {
|
||||
return ErrLoadBeforeRoot
|
||||
}
|
||||
|
||||
heads := []string{beforeId}
|
||||
if beforeId == "" {
|
||||
heads, err = h.treeStorage.Heads()
|
||||
if len(params.Heads) == 1 && params.Heads[0] == "" {
|
||||
params.Heads, err = h.treeStorage.Heads()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else if !include {
|
||||
beforeChange, err := h.treeBuilder.loadChange(beforeId)
|
||||
}
|
||||
if !params.IncludeBeforeId && len(params.Heads) == 1 {
|
||||
beforeChange, err := h.treeBuilder.loadChange(params.Heads[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
heads = beforeChange.PreviousIds
|
||||
params.Heads = beforeChange.PreviousIds
|
||||
}
|
||||
|
||||
h.tree, err = h.treeBuilder.build(heads, nil, nil)
|
||||
h.tree, err = h.treeBuilder.build(params.Heads, nil, nil)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -1174,7 +1174,7 @@ func TestObjectTree(t *testing.T) {
|
|||
}
|
||||
deps.treeStorage.AddRawChangesSetHeads(rawChanges, []string{"6"})
|
||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
||||
BeforeId: "6",
|
||||
Heads: []string{"6"},
|
||||
IncludeBeforeId: false,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
@ -1205,9 +1205,7 @@ func TestObjectTree(t *testing.T) {
|
|||
changeCreator.CreateRaw("6", aclList.Head().Id, "5", false, "5"),
|
||||
}
|
||||
deps.treeStorage.AddRawChangesSetHeads(rawChanges, []string{"6"})
|
||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
||||
BuildFullTree: true,
|
||||
})
|
||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{})
|
||||
require.NoError(t, err)
|
||||
// check tree heads
|
||||
assert.Equal(t, []string{"6"}, hTree.Heads())
|
||||
|
@ -1236,8 +1234,7 @@ func TestObjectTree(t *testing.T) {
|
|||
}
|
||||
deps.treeStorage.AddRawChangesSetHeads(rawChanges, []string{"6"})
|
||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
||||
BeforeId: "6",
|
||||
IncludeBeforeId: true,
|
||||
Heads: []string{"6"}, IncludeBeforeId: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
// check tree heads
|
||||
|
@ -1257,7 +1254,7 @@ func TestObjectTree(t *testing.T) {
|
|||
t.Run("test history tree root", func(t *testing.T) {
|
||||
_, deps := prepareHistoryTreeDeps(aclList)
|
||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
||||
BeforeId: "0",
|
||||
Heads: []string{"0"},
|
||||
IncludeBeforeId: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -27,9 +27,8 @@ type ObjectTreeDerivePayload struct {
|
|||
type HistoryTreeParams struct {
|
||||
TreeStorage treestorage.TreeStorage
|
||||
AclList list.AclList
|
||||
BeforeId string
|
||||
Heads []string
|
||||
IncludeBeforeId bool
|
||||
BuildFullTree bool
|
||||
}
|
||||
|
||||
type objectTreeDeps struct {
|
||||
|
|
|
@ -39,9 +39,8 @@ var log = logger.NewNamed(CName)
|
|||
var ErrSpaceClosed = errors.New("space is closed")
|
||||
|
||||
type HistoryTreeOpts struct {
|
||||
BeforeId string
|
||||
Include bool
|
||||
BuildFullTree bool
|
||||
Heads []string
|
||||
Include bool
|
||||
}
|
||||
|
||||
type TreeBuilder interface {
|
||||
|
@ -145,9 +144,8 @@ func (t *treeBuilder) BuildHistoryTree(ctx context.Context, id string, opts Hist
|
|||
|
||||
params := objecttree.HistoryTreeParams{
|
||||
AclList: t.aclList,
|
||||
BeforeId: opts.BeforeId,
|
||||
Heads: opts.Heads,
|
||||
IncludeBeforeId: opts.Include,
|
||||
BuildFullTree: opts.BuildFullTree,
|
||||
}
|
||||
params.TreeStorage, err = t.spaceStorage.TreeStorage(id)
|
||||
if err != nil {
|
||||
|
|
|
@ -44,9 +44,8 @@ var (
|
|||
DoSnapshot = objecttree.DoSnapshot
|
||||
buildHistoryTree = func(objTree objecttree.ObjectTree) (objecttree.ReadableObjectTree, error) {
|
||||
return objecttree.BuildHistoryTree(objecttree.HistoryTreeParams{
|
||||
TreeStorage: objTree.Storage(),
|
||||
AclList: objTree.AclList(),
|
||||
BuildFullTree: true,
|
||||
TreeStorage: objTree.Storage(),
|
||||
AclList: objTree.AclList(),
|
||||
})
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue