2019-08-13 20:51:14 +03:00
|
|
|
package core
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2019-12-16 20:09:42 +03:00
|
|
|
"strings"
|
2019-08-13 20:51:14 +03:00
|
|
|
|
|
|
|
"github.com/MichaelMure/git-bug/entity"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ImportEvent int
|
|
|
|
|
|
|
|
const (
|
|
|
|
_ ImportEvent = iota
|
2019-11-19 21:03:38 +03:00
|
|
|
|
|
|
|
// Bug has been created
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventBug
|
2019-11-19 21:03:38 +03:00
|
|
|
// Comment has been created
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventComment
|
2019-11-19 21:03:38 +03:00
|
|
|
// Comment has been edited
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventCommentEdition
|
2019-11-19 21:03:38 +03:00
|
|
|
// Bug's status has changed
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventStatusChange
|
2019-11-19 21:03:38 +03:00
|
|
|
// Bug's title has changed
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventTitleEdition
|
2019-11-19 21:03:38 +03:00
|
|
|
// Bug's labels changed
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventLabelChange
|
2019-11-19 21:03:38 +03:00
|
|
|
// Nothing happened on a Bug
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventNothing
|
2019-11-19 21:03:38 +03:00
|
|
|
|
|
|
|
// Identity has been created
|
|
|
|
ImportEventIdentity
|
|
|
|
|
2019-12-14 00:17:26 +03:00
|
|
|
// Something wrong happened during import that is worth notifying to the user
|
|
|
|
// but not severe enough to consider the import a failure.
|
|
|
|
ImportEventWarning
|
2020-02-09 22:08:12 +03:00
|
|
|
|
2019-11-19 21:03:38 +03:00
|
|
|
// Error happened during import
|
2019-08-13 20:51:14 +03:00
|
|
|
ImportEventError
|
|
|
|
)
|
|
|
|
|
|
|
|
// ImportResult is an event that is emitted during the import process, to
|
|
|
|
// allow calling code to report on what is happening, collect metrics or
|
|
|
|
// display meaningful errors if something went wrong.
|
|
|
|
type ImportResult struct {
|
|
|
|
Err error
|
|
|
|
Event ImportEvent
|
|
|
|
ID entity.Id
|
|
|
|
Reason string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (er ImportResult) String() string {
|
|
|
|
switch er.Event {
|
|
|
|
case ImportEventBug:
|
|
|
|
return fmt.Sprintf("new issue: %s", er.ID)
|
|
|
|
case ImportEventComment:
|
|
|
|
return fmt.Sprintf("new comment: %s", er.ID)
|
|
|
|
case ImportEventCommentEdition:
|
|
|
|
return fmt.Sprintf("updated comment: %s", er.ID)
|
|
|
|
case ImportEventStatusChange:
|
|
|
|
return fmt.Sprintf("changed status: %s", er.ID)
|
|
|
|
case ImportEventTitleEdition:
|
|
|
|
return fmt.Sprintf("changed title: %s", er.ID)
|
|
|
|
case ImportEventLabelChange:
|
|
|
|
return fmt.Sprintf("changed label: %s", er.ID)
|
|
|
|
case ImportEventIdentity:
|
|
|
|
return fmt.Sprintf("new identity: %s", er.ID)
|
|
|
|
case ImportEventNothing:
|
|
|
|
if er.ID != "" {
|
2019-08-18 00:46:10 +03:00
|
|
|
return fmt.Sprintf("no action taken for event %s: %s", er.ID, er.Reason)
|
2019-08-13 20:51:14 +03:00
|
|
|
}
|
2019-08-18 00:46:10 +03:00
|
|
|
return fmt.Sprintf("no action taken: %s", er.Reason)
|
2019-08-13 20:51:14 +03:00
|
|
|
case ImportEventError:
|
|
|
|
if er.ID != "" {
|
|
|
|
return fmt.Sprintf("import error at id %s: %s", er.ID, er.Err.Error())
|
|
|
|
}
|
|
|
|
return fmt.Sprintf("import error: %s", er.Err.Error())
|
2019-12-14 00:17:26 +03:00
|
|
|
case ImportEventWarning:
|
2019-12-16 20:09:42 +03:00
|
|
|
parts := make([]string, 0, 4)
|
|
|
|
parts = append(parts, "warning:")
|
2019-12-14 00:17:26 +03:00
|
|
|
if er.ID != "" {
|
2019-12-16 20:09:42 +03:00
|
|
|
parts = append(parts, fmt.Sprintf("at id %s", er.ID))
|
2019-12-14 00:17:26 +03:00
|
|
|
}
|
2019-12-16 20:09:42 +03:00
|
|
|
if er.Reason != "" {
|
|
|
|
parts = append(parts, fmt.Sprintf("reason: %s", er.Reason))
|
|
|
|
}
|
|
|
|
if er.Err != nil {
|
|
|
|
parts = append(parts, fmt.Sprintf("err: %s", er.Err))
|
|
|
|
}
|
|
|
|
return strings.Join(parts, " ")
|
2019-12-14 00:17:26 +03:00
|
|
|
|
2019-08-13 20:51:14 +03:00
|
|
|
default:
|
|
|
|
panic("unknown import result")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportError(err error, id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
Err: err,
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventError,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-12-14 00:17:26 +03:00
|
|
|
func NewImportWarning(err error, id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
Err: err,
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventWarning,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-13 20:51:14 +03:00
|
|
|
func NewImportNothing(id entity.Id, reason string) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Reason: reason,
|
|
|
|
Event: ImportEventNothing,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportBug(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventBug,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportComment(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventComment,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportCommentEdition(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventCommentEdition,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportStatusChange(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventStatusChange,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportLabelChange(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventLabelChange,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportTitleEdition(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventTitleEdition,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewImportIdentity(id entity.Id) ImportResult {
|
|
|
|
return ImportResult{
|
|
|
|
ID: id,
|
|
|
|
Event: ImportEventIdentity,
|
|
|
|
}
|
|
|
|
}
|