1package bug
2
3import (
4 "github.com/MichaelMure/git-bug/util/git"
5 "github.com/pkg/errors"
6)
7
8// SetStatusOperation will change the status of a bug
9
10var _ Operation = SetStatusOperation{}
11
12type SetStatusOperation struct {
13 *OpBase
14 Status Status `json:"status"`
15}
16
17func (op SetStatusOperation) base() *OpBase {
18 return op.OpBase
19}
20
21func (op SetStatusOperation) Hash() (git.Hash, error) {
22 return hashOperation(op)
23}
24
25func (op SetStatusOperation) Apply(snapshot *Snapshot) {
26 snapshot.Status = op.Status
27}
28
29func (op SetStatusOperation) Validate() error {
30 if err := opBaseValidate(op, SetStatusOp); err != nil {
31 return err
32 }
33
34 if err := op.Status.Validate(); err != nil {
35 return errors.Wrap(err, "status")
36 }
37
38 return nil
39}
40
41func NewSetStatusOp(author Person, unixTime int64, status Status) SetStatusOperation {
42 return SetStatusOperation{
43 OpBase: newOpBase(SetStatusOp, author, unixTime),
44 Status: status,
45 }
46}
47
48// Convenience function to apply the operation
49func Open(b Interface, author Person, unixTime int64) error {
50 op := NewSetStatusOp(author, unixTime, OpenStatus)
51 if err := op.Validate(); err != nil {
52 return err
53 }
54 b.Append(op)
55 return nil
56}
57
58// Convenience function to apply the operation
59func Close(b Interface, author Person, unixTime int64) error {
60 op := NewSetStatusOp(author, unixTime, ClosedStatus)
61 if err := op.Validate(); err != nil {
62 return err
63 }
64 b.Append(op)
65 return nil
66}