diff options
author | Michael Muré <batolettre@gmail.com> | 2023-01-14 14:21:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-14 14:21:01 +0100 |
commit | 98eb1c111efb22ddb02ab71779f1862abab4baa5 (patch) | |
tree | bb4d8bc2c1fd5614d274dab272e7dae03da5496b /cache/subcache.go | |
parent | 9c50a359704f4edd2f33df6d256e032feae3a576 (diff) | |
parent | 5bf274e64a3486bba21edd9bf455089839219f25 (diff) | |
download | git-bug-98eb1c111efb22ddb02ab71779f1862abab4baa5.tar.gz |
Merge pull request #933 from zinderic/feat-cleanup-subcommand
add cleanup sub-command that remove local bugs and identities
Diffstat (limited to 'cache/subcache.go')
-rw-r--r-- | cache/subcache.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/cache/subcache.go b/cache/subcache.go index 7b599b10..aa9ae62d 100644 --- a/cache/subcache.go +++ b/cache/subcache.go @@ -34,6 +34,7 @@ type Actions[EntityT entity.Interface] 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] 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 identity.Interface) <-chan entity.MergeResult } @@ -399,7 +400,49 @@ func (sc *SubCache[EntityT, ExcerptT, CacheT]) Remove(prefix string) error { delete(sc.excerpts, e.Id()) sc.lru.Remove(e.Id()) + index, err := sc.repo.GetIndex(sc.namespace) + if err != nil { + sc.mu.Unlock() + return err + } + + err = index.Remove(e.Id().String()) + sc.mu.Unlock() + if err != nil { + return err + } + + return sc.write() +} + +func (sc *SubCache[EntityT, ExcerptT, CacheT]) RemoveAll() error { + sc.mu.Lock() + + err := sc.actions.RemoveAll(sc.repo) + if err != nil { + sc.mu.Unlock() + return err + } + + for id, _ := range sc.cached { + delete(sc.cached, id) + sc.lru.Remove(id) + } + for id, _ := range sc.excerpts { + delete(sc.excerpts, id) + } + + index, err := sc.repo.GetIndex(sc.namespace) + if err != nil { + sc.mu.Unlock() + return err + } + + err = index.Clear() sc.mu.Unlock() + if err != nil { + return err + } return sc.write() } |