diff options
author | Amine Hilaly <hilalyamine@gmail.com> | 2019-08-13 19:51:14 +0200 |
---|---|---|
committer | Amine Hilaly <hilalyamine@gmail.com> | 2019-08-18 00:14:22 +0200 |
commit | 5ca326af83b90531d4d0c502bb1beabbe1b48c55 (patch) | |
tree | 6b7a32f2db9ab7321e9965c0ef4c715c6c517178 /bridge/core/import.go | |
parent | 6428352bd14828f670206b60862de7f71c52d235 (diff) | |
download | git-bug-5ca326af83b90531d4d0c502bb1beabbe1b48c55.tar.gz |
bridge/core: add context.Context to ImportAll and ExportAll signatures
bridge/core: add ImportResult objects to stream import events
bridge/core: launchpad support asynchronous import
bridge/github: cancellable export and import functions
bridge/gitlab: cancellable export and import functions
commands: bridge pull/push gracefull kill
bridge/github: fix github import
bridge/github: use simple context for imports
bridge/core: name parameters in interfaces
github/core: Add EventError to export and import events types
bridge/gitlab: add context support in gitlab requests functions
bridge/gitlab: remove imported events count from importer logic
bridge/github: remove imported events count from importer logic
bridge/github: add context support in query and muration requets
bridge/github: fix bug duplicate editions after multiple calls
bridge/core: import import and export events String methods
bridge/gitlab: fix error handling in note import events
commands/bridge: Add statistics about imports and exports
bridge/gitlab: properly handle context cancellation
bridge/github: improve error handling
bridge: break iterators on context cancel or timeout
bridge: add context timeout support
bridge: improve event formating and error handling
commands: handle interrupt and switch cases
bridge/github: add export mutation timeouts
bridge: fix race condition bug in the github and gitlab importers
bridge/github: improve context error handling
Diffstat (limited to 'bridge/core/import.go')
-rw-r--r-- | bridge/core/import.go | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/bridge/core/import.go b/bridge/core/import.go new file mode 100644 index 00000000..0961e00b --- /dev/null +++ b/bridge/core/import.go @@ -0,0 +1,128 @@ +package core + +import ( + "fmt" + + "github.com/MichaelMure/git-bug/entity" +) + +type ImportEvent int + +const ( + _ ImportEvent = iota + ImportEventBug + ImportEventComment + ImportEventCommentEdition + ImportEventStatusChange + ImportEventTitleEdition + ImportEventLabelChange + ImportEventIdentity + ImportEventNothing + 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 != "" { + return fmt.Sprintf("ignoring import event %s: %s", er.ID, er.Reason) + } + return fmt.Sprintf("ignoring event: %s", er.Reason) + 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()) + default: + panic("unknown import result") + } +} + +func NewImportError(err error, id entity.Id) ImportResult { + return ImportResult{ + Err: err, + ID: id, + Event: ImportEventError, + } +} + +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, + } +} |