package bug import ( "fmt" "time" "github.com/MichaelMure/git-bug/identity" "github.com/MichaelMure/git-bug/util/git" ) // Snapshot is a compiled form of the Bug data structure used for storage and merge type Snapshot struct { id string Status Status Title string Comments []Comment Labels []Label Author identity.Interface Actors []identity.Interface Participants []identity.Interface CreatedAt time.Time Timeline []TimelineItem Operations []Operation } // Return the Bug identifier func (snap *Snapshot) Id() string { return snap.id } // Return the Bug identifier truncated for human consumption func (snap *Snapshot) HumanId() string { return FormatHumanID(snap.id) } // Return the last time a bug was modified func (snap *Snapshot) LastEditTime() time.Time { if len(snap.Operations) == 0 { return time.Unix(0, 0) } return snap.Operations[len(snap.Operations)-1].Time() } // Return the last timestamp a bug was modified func (snap *Snapshot) LastEditUnix() int64 { if len(snap.Operations) == 0 { return 0 } return snap.Operations[len(snap.Operations)-1].GetUnixTime() } // SearchTimelineItem will search in the timeline for an item matching the given hash func (snap *Snapshot) SearchTimelineItem(hash git.Hash) (TimelineItem, error) { for i := range snap.Timeline { if snap.Timeline[i].Hash() == hash { return snap.Timeline[i], nil } } return nil, fmt.Errorf("timeline item not found") } // append the operation author to the actors list func (snap *Snapshot) addActor(actor identity.Interface) { for _, a := range snap.Actors { if actor.Id() == a.Id() { return } } snap.Actors = append(snap.Actors, actor) } // append the operation author to the participants list func (snap *Snapshot) addParticipant(participant identity.Interface) { for _, p := range snap.Participants { if participant.Id() == p.Id() { return } } snap.Participants = append(snap.Participants, participant) } // Sign post method for gqlgen func (snap *Snapshot) IsAuthored() {}