diff options
author | Michael Muré <batolettre@gmail.com> | 2018-09-30 11:10:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-30 11:10:03 +0200 |
commit | d71bb7dd7632780cf5aad5fda84027fa03a9d0f0 (patch) | |
tree | dba6c3c0bab18f41e21cd36a9fe05d1d27a574d4 /bug/op_add_comment.go | |
parent | 8fdd6bf99c111c3756056e87ffd9209875ac5c1f (diff) | |
parent | bad9cda969b49bf1bce6799056476ac4684892df (diff) | |
download | git-bug-d71bb7dd7632780cf5aad5fda84027fa03a9d0f0.tar.gz |
Merge pull request #54 from MichaelMure/editablecomment
Core support for editable comments
Diffstat (limited to 'bug/op_add_comment.go')
-rw-r--r-- | bug/op_add_comment.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/bug/op_add_comment.go b/bug/op_add_comment.go new file mode 100644 index 00000000..7f8b8b5b --- /dev/null +++ b/bug/op_add_comment.go @@ -0,0 +1,88 @@ +package bug + +import ( + "fmt" + + "github.com/MichaelMure/git-bug/util/git" + "github.com/MichaelMure/git-bug/util/text" +) + +var _ Operation = &AddCommentOperation{} + +// AddCommentOperation will add a new comment in the bug +type AddCommentOperation struct { + *OpBase + Message string `json:"message"` + // TODO: change for a map[string]util.hash to store the filename ? + Files []git.Hash `json:"files"` +} + +func (op *AddCommentOperation) base() *OpBase { + return op.OpBase +} + +func (op *AddCommentOperation) Hash() (git.Hash, error) { + return hashOperation(op) +} + +func (op *AddCommentOperation) Apply(snapshot *Snapshot) { + comment := Comment{ + Message: op.Message, + Author: op.Author, + Files: op.Files, + UnixTime: Timestamp(op.UnixTime), + } + + snapshot.Comments = append(snapshot.Comments, comment) + + hash, err := op.Hash() + if err != nil { + // Should never error unless a programming error happened + // (covered in OpBase.Validate()) + panic(err) + } + + snapshot.Timeline = append(snapshot.Timeline, NewCommentTimelineItem(hash, comment)) +} + +func (op *AddCommentOperation) GetFiles() []git.Hash { + return op.Files +} + +func (op *AddCommentOperation) Validate() error { + if err := opBaseValidate(op, AddCommentOp); err != nil { + return err + } + + if text.Empty(op.Message) { + return fmt.Errorf("message is empty") + } + + if !text.Safe(op.Message) { + return fmt.Errorf("message is not fully printable") + } + + return nil +} + +func NewAddCommentOp(author Person, unixTime int64, message string, files []git.Hash) *AddCommentOperation { + return &AddCommentOperation{ + OpBase: newOpBase(AddCommentOp, author, unixTime), + Message: message, + Files: files, + } +} + +// Convenience function to apply the operation +func AddComment(b Interface, author Person, unixTime int64, message string) error { + return AddCommentWithFiles(b, author, unixTime, message, nil) +} + +func AddCommentWithFiles(b Interface, author Person, unixTime int64, message string, files []git.Hash) error { + addCommentOp := NewAddCommentOp(author, unixTime, message, files) + if err := addCommentOp.Validate(); err != nil { + return err + } + b.Append(addCommentOp) + return nil +} |