diff --git a/commonspace/object/tree/objecttree/historytree.go b/commonspace/object/tree/objecttree/historytree.go index 3a59230b..fc07917d 100644 --- a/commonspace/object/tree/objecttree/historytree.go +++ b/commonspace/object/tree/objecttree/historytree.go @@ -11,6 +11,7 @@ type HistoryTree interface { Root() *Change Heads() []string IterateFrom(id string, convert ChangeConvertFunc, iterate ChangeIterateFunc) error + GetChange(string) (*Change, error) } type historyTree struct { diff --git a/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go b/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go index 6e743ba5..1198794c 100644 --- a/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go +++ b/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go @@ -125,6 +125,21 @@ func (mr *MockObjectTreeMockRecorder) Delete() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockObjectTree)(nil).Delete)) } +// GetChange mocks base method. +func (m *MockObjectTree) GetChange(arg0 string) (*objecttree.Change, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetChange", arg0) + ret0, _ := ret[0].(*objecttree.Change) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetChange indicates an expected call of GetChange. +func (mr *MockObjectTreeMockRecorder) GetChange(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetChange", reflect.TypeOf((*MockObjectTree)(nil).GetChange), arg0) +} + // HasChanges mocks base method. func (m *MockObjectTree) HasChanges(arg0 ...string) bool { m.ctrl.T.Helper() diff --git a/commonspace/object/tree/objecttree/objecttree.go b/commonspace/object/tree/objecttree/objecttree.go index c08003b6..f96da1b4 100644 --- a/commonspace/object/tree/objecttree/objecttree.go +++ b/commonspace/object/tree/objecttree/objecttree.go @@ -23,6 +23,7 @@ type RWLocker interface { var ( ErrHasInvalidChanges = errors.New("the change is invalid") ErrNoCommonSnapshot = errors.New("trees doesn't have a common snapshot") + ErrNoChangeInTree = errors.New("no such change in tree") ) type AddResultSummary int @@ -51,9 +52,11 @@ type ObjectTree interface { UnmarshalledHeader() *Change Heads() []string Root() *Change - HasChanges(...string) bool - DebugDump(parser DescriptionParser) (string, error) + HasChanges(...string) bool + GetChange(string) (*Change, error) + + DebugDump(parser DescriptionParser) (string, error) IterateRoot(convert ChangeConvertFunc, iterate ChangeIterateFunc) error IterateFrom(id string, convert ChangeConvertFunc, iterate ChangeIterateFunc) error @@ -155,6 +158,13 @@ func (ot *objectTree) Storage() treestorage.TreeStorage { return ot.treeStorage } +func (ot *objectTree) GetChange(id string) (*Change, error) { + if ch, ok := ot.tree.attached[id]; ok { + return ch, nil + } + return nil, ErrNoChangeInTree +} + func (ot *objectTree) AddContent(ctx context.Context, content SignableChangeContent) (res AddResult, err error) { payload, err := ot.prepareBuilderContent(content) if err != nil { diff --git a/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go b/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go index 3c4a8ae7..c5b05925 100644 --- a/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go +++ b/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go @@ -250,6 +250,21 @@ func (mr *MockSyncTreeMockRecorder) Delete() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockSyncTree)(nil).Delete)) } +// GetChange mocks base method. +func (m *MockSyncTree) GetChange(arg0 string) (*objecttree.Change, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetChange", arg0) + ret0, _ := ret[0].(*objecttree.Change) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetChange indicates an expected call of GetChange. +func (mr *MockSyncTreeMockRecorder) GetChange(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetChange", reflect.TypeOf((*MockSyncTree)(nil).GetChange), arg0) +} + // HandleMessage mocks base method. func (m *MockSyncTree) HandleMessage(arg0 context.Context, arg1 string, arg2 *spacesyncproto.ObjectSyncMessage) error { m.ctrl.T.Helper()