diff options
Diffstat (limited to 'bridge/core')
-rw-r--r-- | bridge/core/bridge.go | 10 | ||||
-rw-r--r-- | bridge/core/export.go | 101 | ||||
-rw-r--r-- | bridge/core/interfaces.go | 2 |
3 files changed, 107 insertions, 6 deletions
diff --git a/bridge/core/bridge.go b/bridge/core/bridge.go index 1b960e0e..30e051be 100644 --- a/bridge/core/bridge.go +++ b/bridge/core/bridge.go @@ -297,21 +297,21 @@ func (b *Bridge) ImportAll(since time.Time) error { return importer.ImportAll(b.repo, since) } -func (b *Bridge) ExportAll(since time.Time) error { +func (b *Bridge) ExportAll(since time.Time) (<-chan ExportResult, error) { exporter := b.getExporter() if exporter == nil { - return ErrExportNotSupported + return nil, ErrExportNotSupported } err := b.ensureConfig() if err != nil { - return err + return nil, err } err = b.ensureInit() if err != nil { - return err + return nil, err } - return exporter.ExportAll(b.repo, since) + return exporter.ExportAll(b.repo, since), nil } diff --git a/bridge/core/export.go b/bridge/core/export.go new file mode 100644 index 00000000..51149430 --- /dev/null +++ b/bridge/core/export.go @@ -0,0 +1,101 @@ +package core + +import "fmt" + +type EventStatus int + +const ( + _ EventStatus = iota + EventStatusBug + EventStatusComment + EventStatusCommentEdition + EventStatusStatusChange + EventStatusTitleEdition + EventStatusLabelChange + EventStatusNothing +) + +type ExportResult struct { + Err error + Event EventStatus + ID string + Reason string +} + +func (er ExportResult) String() string { + switch er.Event { + case EventStatusBug: + return "new issue" + case EventStatusComment: + return "new comment" + case EventStatusCommentEdition: + return "updated comment" + case EventStatusStatusChange: + return "changed status" + case EventStatusTitleEdition: + return "changed title" + case EventStatusLabelChange: + return "changed label" + case EventStatusNothing: + return fmt.Sprintf("no event: %v", er.Reason) + default: + panic("unknown export result") + } +} + +func NewExportError(err error, reason string) ExportResult { + return ExportResult{ + Err: err, + Reason: reason, + } +} + +func NewExportNothing(id string, reason string) ExportResult { + return ExportResult{ + ID: id, + Reason: reason, + Event: EventStatusNothing, + } +} + +func NewExportBug(id string) ExportResult { + return ExportResult{ + ID: id, + Event: EventStatusBug, + } +} + +func NewExportComment(id string) ExportResult { + return ExportResult{ + ID: id, + Event: EventStatusComment, + } +} + +func NewExportCommentEdition(id string) ExportResult { + return ExportResult{ + ID: id, + Event: EventStatusCommentEdition, + } +} + +func NewExportStatusChange(id string) ExportResult { + return ExportResult{ + ID: id, + Event: EventStatusStatusChange, + } +} + +func NewExportLabelChange(id string) ExportResult { + return ExportResult{ + ID: id, + Event: EventStatusLabelChange, + } +} + +func NewExportTitleEdition(id string) ExportResult { + return ExportResult{ + ID: id, + Event: EventStatusTitleEdition, + } +} diff --git a/bridge/core/interfaces.go b/bridge/core/interfaces.go index 37fdb3d7..5cc7006a 100644 --- a/bridge/core/interfaces.go +++ b/bridge/core/interfaces.go @@ -34,5 +34,5 @@ type Importer interface { type Exporter interface { Init(conf Configuration) error - ExportAll(repo *cache.RepoCache, since time.Time) error + ExportAll(repo *cache.RepoCache, since time.Time) <-chan ExportResult } |