aboutsummaryrefslogtreecommitdiffstats
path: root/bridge/core/import.go
diff options
context:
space:
mode:
authorAmine Hilaly <hilalyamine@gmail.com>2019-08-13 19:51:14 +0200
committerAmine Hilaly <hilalyamine@gmail.com>2019-08-18 00:14:22 +0200
commit5ca326af83b90531d4d0c502bb1beabbe1b48c55 (patch)
tree6b7a32f2db9ab7321e9965c0ef4c715c6c517178 /bridge/core/import.go
parent6428352bd14828f670206b60862de7f71c52d235 (diff)
downloadgit-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.go128
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,
+ }
+}