diff options
Diffstat (limited to 'cache')
-rw-r--r-- | cache/bug_cache.go | 20 | ||||
-rw-r--r-- | cache/cached.go | 8 | ||||
-rw-r--r-- | cache/subcache.go | 13 | ||||
-rw-r--r-- | cache/with_snapshot.go | 13 |
4 files changed, 28 insertions, 26 deletions
diff --git a/cache/bug_cache.go b/cache/bug_cache.go index 8f4bca27f..5356fa1ac 100644 --- a/cache/bug_cache.go +++ b/cache/bug_cache.go @@ -29,7 +29,7 @@ func NewBugCache(b *bug.Bug, repo repository.ClockedRepo, getUserIdentity getUse repo: repo, entityUpdated: entityUpdated, getUserIdentity: getUserIdentity, - entity: &withSnapshot[*bug.Snapshot, bug.Operation]{Interface: b}, + entity: &withSnapshot[*bug.Snapshot, bug.Operation]{WithCommit: b}, }, } } @@ -47,7 +47,7 @@ func (c *BugCache) AddCommentWithFiles(message string, files []repository.Hash) return c.AddCommentRaw(author, time.Now().Unix(), message, files, nil) } -func (c *BugCache) AddCommentRaw(author entity.Interface, unixTime int64, message string, files []repository.Hash, metadata map[string]string) (entity.CombinedId, *bug.AddCommentOperation, error) { +func (c *BugCache) AddCommentRaw(author entity.Identity, unixTime int64, message string, files []repository.Hash, metadata map[string]string) (entity.CombinedId, *bug.AddCommentOperation, error) { c.mu.Lock() commentId, op, err := bug.AddComment(c.entity, author, unixTime, message, files, metadata) c.mu.Unlock() @@ -66,7 +66,7 @@ func (c *BugCache) ChangeLabels(added []string, removed []string) ([]bug.LabelCh return c.ChangeLabelsRaw(author, time.Now().Unix(), added, removed, nil) } -func (c *BugCache) ChangeLabelsRaw(author entity.Interface, unixTime int64, added []string, removed []string, metadata map[string]string) ([]bug.LabelChangeResult, *bug.LabelChangeOperation, error) { +func (c *BugCache) ChangeLabelsRaw(author entity.Identity, unixTime int64, added []string, removed []string, metadata map[string]string) ([]bug.LabelChangeResult, *bug.LabelChangeOperation, error) { c.mu.Lock() changes, op, err := bug.ChangeLabels(c.entity, author, unixTime, added, removed, metadata) c.mu.Unlock() @@ -85,7 +85,7 @@ func (c *BugCache) ForceChangeLabels(added []string, removed []string) (*bug.Lab return c.ForceChangeLabelsRaw(author, time.Now().Unix(), added, removed, nil) } -func (c *BugCache) ForceChangeLabelsRaw(author entity.Interface, unixTime int64, added []string, removed []string, metadata map[string]string) (*bug.LabelChangeOperation, error) { +func (c *BugCache) ForceChangeLabelsRaw(author entity.Identity, unixTime int64, added []string, removed []string, metadata map[string]string) (*bug.LabelChangeOperation, error) { c.mu.Lock() op, err := bug.ForceChangeLabels(c.entity, author, unixTime, added, removed, metadata) c.mu.Unlock() @@ -104,7 +104,7 @@ func (c *BugCache) Open() (*bug.SetStatusOperation, error) { return c.OpenRaw(author, time.Now().Unix(), nil) } -func (c *BugCache) OpenRaw(author entity.Interface, unixTime int64, metadata map[string]string) (*bug.SetStatusOperation, error) { +func (c *BugCache) OpenRaw(author entity.Identity, unixTime int64, metadata map[string]string) (*bug.SetStatusOperation, error) { c.mu.Lock() op, err := bug.Open(c.entity, author, unixTime, metadata) c.mu.Unlock() @@ -123,7 +123,7 @@ func (c *BugCache) Close() (*bug.SetStatusOperation, error) { return c.CloseRaw(author, time.Now().Unix(), nil) } -func (c *BugCache) CloseRaw(author entity.Interface, unixTime int64, metadata map[string]string) (*bug.SetStatusOperation, error) { +func (c *BugCache) CloseRaw(author entity.Identity, unixTime int64, metadata map[string]string) (*bug.SetStatusOperation, error) { c.mu.Lock() op, err := bug.Close(c.entity, author, unixTime, metadata) c.mu.Unlock() @@ -142,7 +142,7 @@ func (c *BugCache) SetTitle(title string) (*bug.SetTitleOperation, error) { return c.SetTitleRaw(author, time.Now().Unix(), title, nil) } -func (c *BugCache) SetTitleRaw(author entity.Interface, unixTime int64, title string, metadata map[string]string) (*bug.SetTitleOperation, error) { +func (c *BugCache) SetTitleRaw(author entity.Identity, unixTime int64, title string, metadata map[string]string) (*bug.SetTitleOperation, error) { c.mu.Lock() op, err := bug.SetTitle(c.entity, author, unixTime, title, metadata) c.mu.Unlock() @@ -163,7 +163,7 @@ func (c *BugCache) EditCreateComment(body string) (entity.CombinedId, *bug.EditC } // EditCreateCommentRaw is a convenience function to edit the body of a bug (the first comment) -func (c *BugCache) EditCreateCommentRaw(author entity.Interface, unixTime int64, body string, metadata map[string]string) (entity.CombinedId, *bug.EditCommentOperation, error) { +func (c *BugCache) EditCreateCommentRaw(author entity.Identity, unixTime int64, body string, metadata map[string]string) (entity.CombinedId, *bug.EditCommentOperation, error) { c.mu.Lock() commentId, op, err := bug.EditCreateComment(c.entity, author, unixTime, body, nil, metadata) c.mu.Unlock() @@ -182,7 +182,7 @@ func (c *BugCache) EditComment(target entity.CombinedId, message string) (*bug.E return c.EditCommentRaw(author, time.Now().Unix(), target, message, nil) } -func (c *BugCache) EditCommentRaw(author entity.Interface, unixTime int64, target entity.CombinedId, message string, metadata map[string]string) (*bug.EditCommentOperation, error) { +func (c *BugCache) EditCommentRaw(author entity.Identity, unixTime int64, target entity.CombinedId, message string, metadata map[string]string) (*bug.EditCommentOperation, error) { comment, err := c.Compile().SearchComment(target) if err != nil { return nil, err @@ -209,7 +209,7 @@ func (c *BugCache) SetMetadata(target entity.Id, newMetadata map[string]string) return c.SetMetadataRaw(author, time.Now().Unix(), target, newMetadata) } -func (c *BugCache) SetMetadataRaw(author entity.Interface, unixTime int64, target entity.Id, newMetadata map[string]string) (*dag.SetMetadataOperation[*bug.Snapshot], error) { +func (c *BugCache) SetMetadataRaw(author entity.Identity, unixTime int64, target entity.Id, newMetadata map[string]string) (*dag.SetMetadataOperation[*bug.Snapshot], error) { c.mu.Lock() op, err := bug.SetMetadata(c.entity, author, unixTime, target, newMetadata) c.mu.Unlock() diff --git a/cache/cached.go b/cache/cached.go index 99f384878..d2531f0f2 100644 --- a/cache/cached.go +++ b/cache/cached.go @@ -9,17 +9,17 @@ import ( "github.com/MichaelMure/git-bug/util/lamport" ) -var _ dag.Interface[dag.Snapshot, dag.Operation] = &CachedEntityBase[dag.Snapshot, dag.Operation]{} -var _ CacheEntity = &CachedEntityBase[dag.Snapshot, dag.Operation]{} +var _ entity.Interface[entity.Snapshot, dag.Operation] = &CachedEntityBase[entity.Snapshot, dag.Operation]{} +var _ CacheEntity = &CachedEntityBase[entity.Snapshot, dag.Operation]{} // CachedEntityBase provide the base function of an entity managed by the cache. -type CachedEntityBase[SnapT dag.Snapshot, OpT dag.Operation] struct { +type CachedEntityBase[SnapT entity.Snapshot, OpT dag.Operation] struct { repo repository.ClockedRepo entityUpdated func(id entity.Id) error getUserIdentity getUserIdentityFunc mu sync.RWMutex - entity dag.Interface[SnapT, OpT] + entity entity.WithCommit[SnapT, OpT] } func (e *CachedEntityBase[SnapT, OpT]) Id() entity.Id { diff --git a/cache/subcache.go b/cache/subcache.go index c1a550c3c..2b0da1a57 100644 --- a/cache/subcache.go +++ b/cache/subcache.go @@ -10,6 +10,7 @@ import ( "github.com/pkg/errors" "github.com/MichaelMure/git-bug/entity" + bootstrap "github.com/MichaelMure/git-bug/entity/boostrap" "github.com/MichaelMure/git-bug/repository" ) @@ -29,17 +30,17 @@ type getUserIdentityFunc func() (*IdentityCache, error) // Actions expose a number of action functions on Entities, to give upper layers (cache) a way to normalize interactions. // Note: ideally this wouldn't exist, the cache layer would assume that everything is an entity/dag, and directly use the // functions from this package, but right now identities are not using that framework. -type Actions[EntityT entity.Interface] struct { +type Actions[EntityT entity.Bare] struct { ReadWithResolver func(repo repository.ClockedRepo, resolvers entity.Resolvers, id entity.Id) (EntityT, error) - ReadAllWithResolver func(repo repository.ClockedRepo, resolvers entity.Resolvers) <-chan entity.StreamedEntity[EntityT] + ReadAllWithResolver func(repo repository.ClockedRepo, resolvers entity.Resolvers) <-chan bootstrap.StreamedEntity[EntityT] Remove func(repo repository.ClockedRepo, id entity.Id) error RemoveAll func(repo repository.ClockedRepo) error - MergeAll func(repo repository.ClockedRepo, resolvers entity.Resolvers, remote string, mergeAuthor entity.Interface) <-chan entity.MergeResult + MergeAll func(repo repository.ClockedRepo, resolvers entity.Resolvers, remote string, mergeAuthor entity.Identity) <-chan entity.MergeResult } -var _ cacheMgmt = &SubCache[entity.Interface, Excerpt, CacheEntity]{} +var _ cacheMgmt = &SubCache[entity.Bare, Excerpt, CacheEntity]{} -type SubCache[EntityT entity.Interface, ExcerptT Excerpt, CacheT CacheEntity] struct { +type SubCache[EntityT entity.Bare, ExcerptT Excerpt, CacheT CacheEntity] struct { repo repository.ClockedRepo resolvers func() entity.Resolvers @@ -60,7 +61,7 @@ type SubCache[EntityT entity.Interface, ExcerptT Excerpt, CacheT CacheEntity] st lru *lruIdCache } -func NewSubCache[EntityT entity.Interface, ExcerptT Excerpt, CacheT CacheEntity]( +func NewSubCache[EntityT entity.Bare, ExcerptT Excerpt, CacheT CacheEntity]( repo repository.ClockedRepo, resolvers func() entity.Resolvers, getUserIdentity getUserIdentityFunc, makeCached func(entity EntityT, entityUpdated func(id entity.Id) error) CacheT, diff --git a/cache/with_snapshot.go b/cache/with_snapshot.go index 674b6923b..47bad74ba 100644 --- a/cache/with_snapshot.go +++ b/cache/with_snapshot.go @@ -3,15 +3,16 @@ package cache import ( "sync" + "github.com/MichaelMure/git-bug/entity" "github.com/MichaelMure/git-bug/entity/dag" "github.com/MichaelMure/git-bug/repository" ) -var _ dag.Interface[dag.Snapshot, dag.OperationWithApply[dag.Snapshot]] = &withSnapshot[dag.Snapshot, dag.OperationWithApply[dag.Snapshot]]{} +var _ entity.Interface[entity.Snapshot, dag.OperationWithApply[entity.Snapshot]] = &withSnapshot[entity.Snapshot, dag.OperationWithApply[entity.Snapshot]]{} // withSnapshot encapsulate an entity and maintain a snapshot efficiently. -type withSnapshot[SnapT dag.Snapshot, OpT dag.OperationWithApply[SnapT]] struct { - dag.Interface[SnapT, OpT] +type withSnapshot[SnapT entity.Snapshot, OpT dag.OperationWithApply[SnapT]] struct { + entity.WithCommit[SnapT, OpT] mu sync.Mutex snap *SnapT } @@ -20,7 +21,7 @@ func (ws *withSnapshot[SnapT, OpT]) Compile() SnapT { ws.mu.Lock() defer ws.mu.Unlock() if ws.snap == nil { - snap := ws.Interface.Compile() + snap := ws.WithCommit.Compile() ws.snap = &snap } return *ws.snap @@ -31,7 +32,7 @@ func (ws *withSnapshot[SnapT, OpT]) Append(op OpT) { ws.mu.Lock() defer ws.mu.Unlock() - ws.Interface.Append(op) + ws.WithCommit.Append(op) if ws.snap == nil { return @@ -46,7 +47,7 @@ func (ws *withSnapshot[SnapT, OpT]) Commit(repo repository.ClockedRepo) error { ws.mu.Lock() defer ws.mu.Unlock() - err := ws.Interface.Commit(repo) + err := ws.WithCommit.Commit(repo) if err != nil { ws.snap = nil return err |