mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 02:01:43 +03:00
all operations now have an author and a timestamp
This commit is contained in:
parent
6f83d89274
commit
ba3281dc99
@ -376,7 +376,9 @@ func (bug *Bug) Compile() Snapshot {
|
||||
it := NewOperationIterator(bug)
|
||||
|
||||
for it.Next() {
|
||||
snap = it.Value().Apply(snap)
|
||||
op := it.Value()
|
||||
snap = op.Apply(snap)
|
||||
snap.Operations = append(snap.Operations, op)
|
||||
}
|
||||
|
||||
return snap
|
||||
|
@ -8,9 +8,9 @@ type Comment struct {
|
||||
|
||||
// Creation time of the comment.
|
||||
// Should be used only for human display, never for ordering as we can't rely on it in a distributed system.
|
||||
Time int64
|
||||
UnixTime int64
|
||||
}
|
||||
|
||||
func (c Comment) FormatTime() string {
|
||||
return time.Unix(c.Time, 0).Format(time.RFC822)
|
||||
return time.Unix(c.UnixTime, 0).Format(time.RFC822)
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package bug
|
||||
|
||||
import "time"
|
||||
|
||||
type OperationType int
|
||||
|
||||
const (
|
||||
@ -12,13 +14,28 @@ const (
|
||||
|
||||
type Operation interface {
|
||||
OpType() OperationType
|
||||
Time() time.Time
|
||||
Apply(snapshot Snapshot) Snapshot
|
||||
}
|
||||
|
||||
type OpBase struct {
|
||||
OperationType OperationType
|
||||
Author Person
|
||||
UnixTime int64
|
||||
}
|
||||
|
||||
func NewOpBase(opType OperationType, author Person) OpBase {
|
||||
return OpBase{
|
||||
OperationType: opType,
|
||||
Author: author,
|
||||
UnixTime: time.Now().Unix(),
|
||||
}
|
||||
}
|
||||
|
||||
func (op OpBase) OpType() OperationType {
|
||||
return op.OperationType
|
||||
}
|
||||
|
||||
func (op OpBase) Time() time.Time {
|
||||
return time.Unix(op.UnixTime, 0)
|
||||
}
|
||||
|
@ -2,32 +2,29 @@ package operations
|
||||
|
||||
import (
|
||||
"github.com/MichaelMure/git-bug/bug"
|
||||
"time"
|
||||
)
|
||||
|
||||
// AddCommentOperation will add a new comment in the bug
|
||||
|
||||
var _ bug.Operation = AddCommentOperation{}
|
||||
|
||||
type AddCommentOperation struct {
|
||||
bug.OpBase
|
||||
Message string
|
||||
Author bug.Person
|
||||
Time int64
|
||||
}
|
||||
|
||||
func NewAddCommentOp(author bug.Person, message string) AddCommentOperation {
|
||||
return AddCommentOperation{
|
||||
OpBase: bug.OpBase{OperationType: bug.AddCommentOp},
|
||||
OpBase: bug.NewOpBase(bug.AddCommentOp, author),
|
||||
Message: message,
|
||||
Author: author,
|
||||
Time: time.Now().Unix(),
|
||||
}
|
||||
}
|
||||
|
||||
func (op AddCommentOperation) Apply(snapshot bug.Snapshot) bug.Snapshot {
|
||||
comment := bug.Comment{
|
||||
Message: op.Message,
|
||||
Author: op.Author,
|
||||
Time: op.Time,
|
||||
Message: op.Message,
|
||||
Author: op.Author,
|
||||
UnixTime: op.UnixTime,
|
||||
}
|
||||
|
||||
snapshot.Comments = append(snapshot.Comments, comment)
|
||||
|
@ -2,7 +2,6 @@ package operations
|
||||
|
||||
import (
|
||||
"github.com/MichaelMure/git-bug/bug"
|
||||
"time"
|
||||
)
|
||||
|
||||
// CreateOperation define the initial creation of a bug
|
||||
@ -13,17 +12,13 @@ type CreateOperation struct {
|
||||
bug.OpBase
|
||||
Title string
|
||||
Message string
|
||||
Author bug.Person
|
||||
Time int64
|
||||
}
|
||||
|
||||
func NewCreateOp(author bug.Person, title, message string) CreateOperation {
|
||||
return CreateOperation{
|
||||
OpBase: bug.OpBase{OperationType: bug.CreateOp},
|
||||
OpBase: bug.NewOpBase(bug.CreateOp, author),
|
||||
Title: title,
|
||||
Message: message,
|
||||
Author: author,
|
||||
Time: time.Now().Unix(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,9 +26,9 @@ func (op CreateOperation) Apply(snapshot bug.Snapshot) bug.Snapshot {
|
||||
snapshot.Title = op.Title
|
||||
snapshot.Comments = []bug.Comment{
|
||||
{
|
||||
Message: op.Message,
|
||||
Author: op.Author,
|
||||
Time: op.Time,
|
||||
Message: op.Message,
|
||||
Author: op.Author,
|
||||
UnixTime: op.UnixTime,
|
||||
},
|
||||
}
|
||||
return snapshot
|
||||
|
@ -21,7 +21,7 @@ func TestCreate(t *testing.T) {
|
||||
expected := bug.Snapshot{
|
||||
Title: "title",
|
||||
Comments: []bug.Comment{
|
||||
{Author: rene, Message: "message", Time: create.Time},
|
||||
{Author: rene, Message: "message", UnixTime: create.UnixTime},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
package operations
|
||||
|
||||
import "github.com/MichaelMure/git-bug/bug"
|
||||
import (
|
||||
"github.com/MichaelMure/git-bug/bug"
|
||||
)
|
||||
|
||||
// SetStatusOperation will change the status of a bug
|
||||
|
||||
@ -11,14 +13,15 @@ type SetStatusOperation struct {
|
||||
Status bug.Status
|
||||
}
|
||||
|
||||
func NewSetStatusOp(status bug.Status) SetStatusOperation {
|
||||
func NewSetStatusOp(author bug.Person, status bug.Status) SetStatusOperation {
|
||||
return SetStatusOperation{
|
||||
OpBase: bug.OpBase{OperationType: bug.SetStatusOp},
|
||||
OpBase: bug.NewOpBase(bug.SetStatusOp, author),
|
||||
Status: status,
|
||||
}
|
||||
}
|
||||
|
||||
func (op SetStatusOperation) Apply(snapshot bug.Snapshot) bug.Snapshot {
|
||||
snapshot.Status = op.Status
|
||||
|
||||
return snapshot
|
||||
}
|
||||
|
@ -1,6 +1,10 @@
|
||||
package operations
|
||||
|
||||
import "github.com/MichaelMure/git-bug/bug"
|
||||
import (
|
||||
"github.com/MichaelMure/git-bug/bug"
|
||||
)
|
||||
|
||||
// SetTitleOperation will change the title of a bug
|
||||
|
||||
var _ bug.Operation = SetTitleOperation{}
|
||||
|
||||
@ -9,14 +13,15 @@ type SetTitleOperation struct {
|
||||
Title string
|
||||
}
|
||||
|
||||
func NewSetTitleOp(title string) SetTitleOperation {
|
||||
func NewSetTitleOp(author bug.Person, title string) SetTitleOperation {
|
||||
return SetTitleOperation{
|
||||
OpBase: bug.OpBase{OperationType: bug.SetTitleOp},
|
||||
OpBase: bug.NewOpBase(bug.SetTitleOp, author),
|
||||
Title: title,
|
||||
}
|
||||
}
|
||||
|
||||
func (op SetTitleOperation) Apply(snapshot bug.Snapshot) bug.Snapshot {
|
||||
snapshot.Title = op.Title
|
||||
|
||||
return snapshot
|
||||
}
|
||||
|
@ -7,11 +7,14 @@ import (
|
||||
|
||||
// Snapshot is a compiled form of the Bug data structure used for storage and merge
|
||||
type Snapshot struct {
|
||||
id string
|
||||
id string
|
||||
|
||||
Status Status
|
||||
Title string
|
||||
Comments []Comment
|
||||
Labels []Label
|
||||
|
||||
Operations []Operation
|
||||
}
|
||||
|
||||
// Return the Bug identifier
|
||||
@ -32,10 +35,11 @@ func (snap Snapshot) Summary() string {
|
||||
)
|
||||
}
|
||||
|
||||
// Return the last time a bug was modified
|
||||
func (snap Snapshot) LastEdit() time.Time {
|
||||
if len(snap.Comments) == 0 {
|
||||
if len(snap.Operations) == 0 {
|
||||
return time.Unix(0, 0)
|
||||
}
|
||||
lastEditTimestamp := snap.Comments[len(snap.Comments)-1].Time
|
||||
return time.Unix(lastEditTimestamp, 0)
|
||||
|
||||
return snap.Operations[len(snap.Operations)-1].Time()
|
||||
}
|
||||
|
@ -23,7 +23,12 @@ func runCloseBug(repo repository.Repo, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
op := operations.NewSetStatusOp(bug.ClosedStatus)
|
||||
author, err := bug.GetUser(repo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
op := operations.NewSetStatusOp(author, bug.ClosedStatus)
|
||||
|
||||
b.Append(op)
|
||||
|
||||
|
@ -23,7 +23,12 @@ func runOpenBug(repo repository.Repo, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
op := operations.NewSetStatusOp(bug.OpenStatus)
|
||||
author, err := bug.GetUser(repo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
op := operations.NewSetStatusOp(author, bug.OpenStatus)
|
||||
|
||||
b.Append(op)
|
||||
|
||||
|
@ -13,11 +13,11 @@ var (
|
||||
Email: "rene@descartes.fr",
|
||||
}
|
||||
|
||||
createOp = operations.NewCreateOp(rene, "title", "message")
|
||||
setTitleOp = operations.NewSetTitleOp("title2")
|
||||
addCommentOp = operations.NewAddCommentOp(rene, "message2")
|
||||
SetStatusOp = operations.NewSetStatusOp(bug.ClosedStatus)
|
||||
mockRepo = repository.NewMockRepoForTest()
|
||||
createOp = operations.NewCreateOp(rene, "title", "message")
|
||||
setTitleOp = operations.NewSetTitleOp(rene, "title2")
|
||||
addCommentOp = operations.NewAddCommentOp(rene, "message2")
|
||||
setStatusOp = operations.NewSetStatusOp(rene, bug.ClosedStatus)
|
||||
mockRepo = repository.NewMockRepoForTest()
|
||||
)
|
||||
|
||||
func TestOpIterator(t *testing.T) {
|
||||
@ -30,7 +30,7 @@ func TestOpIterator(t *testing.T) {
|
||||
|
||||
bug1.Append(createOp)
|
||||
bug1.Append(setTitleOp)
|
||||
bug1.Append(SetStatusOp)
|
||||
bug1.Append(setStatusOp)
|
||||
bug1.Commit(mockRepo)
|
||||
|
||||
bug1.Append(setTitleOp)
|
||||
|
Loading…
Reference in New Issue
Block a user