bug_cache.go

  1package cache
  2
  3import (
  4	"time"
  5
  6	"github.com/MichaelMure/git-bug/bug"
  7	"github.com/MichaelMure/git-bug/operations"
  8	"github.com/MichaelMure/git-bug/util/git"
  9)
 10
 11type BugCache struct {
 12	repoCache *RepoCache
 13	bug       *bug.WithSnapshot
 14}
 15
 16func NewBugCache(repoCache *RepoCache, b *bug.Bug) *BugCache {
 17	return &BugCache{
 18		repoCache: repoCache,
 19		bug:       &bug.WithSnapshot{Bug: b},
 20	}
 21}
 22
 23func (c *BugCache) Snapshot() *bug.Snapshot {
 24	return c.bug.Snapshot()
 25}
 26
 27func (c *BugCache) Id() string {
 28	return c.bug.Id()
 29}
 30
 31func (c *BugCache) HumanId() string {
 32	return c.bug.HumanId()
 33}
 34
 35func (c *BugCache) notifyUpdated() error {
 36	return c.repoCache.bugUpdated(c.bug.Id())
 37}
 38
 39func (c *BugCache) AddComment(message string) error {
 40	return c.AddCommentWithFiles(message, nil)
 41}
 42
 43func (c *BugCache) AddCommentWithFiles(message string, files []git.Hash) error {
 44	author, err := bug.GetUser(c.repoCache.repo)
 45	if err != nil {
 46		return err
 47	}
 48
 49	return c.AddCommentRaw(author, time.Now().Unix(), message, files, nil)
 50}
 51
 52func (c *BugCache) AddCommentRaw(author bug.Person, unixTime int64, message string, files []git.Hash, metadata map[string]string) error {
 53	err := operations.CommentWithFiles(c.bug, author, unixTime, message, files)
 54	if err != nil {
 55		return err
 56	}
 57
 58	return c.notifyUpdated()
 59}
 60
 61func (c *BugCache) ChangeLabels(added []string, removed []string) ([]operations.LabelChangeResult, error) {
 62	author, err := bug.GetUser(c.repoCache.repo)
 63	if err != nil {
 64		return nil, err
 65	}
 66
 67	return c.ChangeLabelsRaw(author, time.Now().Unix(), added, removed)
 68}
 69
 70func (c *BugCache) ChangeLabelsRaw(author bug.Person, unixTime int64, added []string, removed []string) ([]operations.LabelChangeResult, error) {
 71	changes, err := operations.ChangeLabels(c.bug, author, unixTime, added, removed)
 72	if err != nil {
 73		return changes, err
 74	}
 75
 76	err = c.notifyUpdated()
 77	if err != nil {
 78		return nil, err
 79	}
 80
 81	return changes, nil
 82}
 83
 84func (c *BugCache) Open() error {
 85	author, err := bug.GetUser(c.repoCache.repo)
 86	if err != nil {
 87		return err
 88	}
 89
 90	return c.OpenRaw(author, time.Now().Unix())
 91}
 92
 93func (c *BugCache) OpenRaw(author bug.Person, unixTime int64) error {
 94	err := operations.Open(c.bug, author, unixTime)
 95	if err != nil {
 96		return err
 97	}
 98
 99	return c.notifyUpdated()
100}
101
102func (c *BugCache) Close() error {
103	author, err := bug.GetUser(c.repoCache.repo)
104	if err != nil {
105		return err
106	}
107
108	return c.CloseRaw(author, time.Now().Unix())
109}
110
111func (c *BugCache) CloseRaw(author bug.Person, unixTime int64) error {
112	err := operations.Close(c.bug, author, unixTime)
113	if err != nil {
114		return err
115	}
116
117	return c.notifyUpdated()
118}
119
120func (c *BugCache) SetTitle(title string) error {
121	author, err := bug.GetUser(c.repoCache.repo)
122	if err != nil {
123		return err
124	}
125
126	return c.SetTitleRaw(author, time.Now().Unix(), title)
127}
128
129func (c *BugCache) SetTitleRaw(author bug.Person, unixTime int64, title string) error {
130	err := operations.SetTitle(c.bug, author, unixTime, title)
131	if err != nil {
132		return err
133	}
134
135	return c.notifyUpdated()
136}
137
138func (c *BugCache) Commit() error {
139	return c.bug.Commit(c.repoCache.repo)
140}
141
142func (c *BugCache) CommitAsNeeded() error {
143	if c.bug.HasPendingOp() {
144		return c.bug.Commit(c.repoCache.repo)
145	}
146	return nil
147}