diff options
Diffstat (limited to 'bridge/core')
-rw-r--r-- | bridge/core/bridge.go | 8 | ||||
-rw-r--r-- | bridge/core/export.go | 101 | ||||
-rw-r--r-- | bridge/core/interfaces.go | 2 |
3 files changed, 106 insertions, 5 deletions
diff --git a/bridge/core/bridge.go b/bridge/core/bridge.go index 1b960e0e..d04e88e4 100644 --- a/bridge/core/bridge.go +++ b/bridge/core/bridge.go @@ -297,20 +297,20 @@ 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) diff --git a/bridge/core/export.go b/bridge/core/export.go new file mode 100644 index 00000000..080ced80 --- /dev/null +++ b/bridge/core/export.go @@ -0,0 +1,101 @@ +package core + +import "fmt" + +type ExportEvent int + +const ( + _ ExportEvent = iota + ExportEventBug + ExportEventComment + ExportEventCommentEdition + ExportEventStatusChange + ExportEventTitleEdition + ExportEventLabelChange + ExportEventNothing +) + +type ExportResult struct { + Err error + Event ExportEvent + ID string + Reason string +} + +func (er ExportResult) String() string { + switch er.Event { + case ExportEventBug: + return "new issue" + case ExportEventComment: + return "new comment" + case ExportEventCommentEdition: + return "updated comment" + case ExportEventStatusChange: + return "changed status" + case ExportEventTitleEdition: + return "changed title" + case ExportEventLabelChange: + return "changed label" + case ExportEventNothing: + 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: ExportEventNothing, + } +} + +func NewExportBug(id string) ExportResult { + return ExportResult{ + ID: id, + Event: ExportEventBug, + } +} + +func NewExportComment(id string) ExportResult { + return ExportResult{ + ID: id, + Event: ExportEventComment, + } +} + +func NewExportCommentEdition(id string) ExportResult { + return ExportResult{ + ID: id, + Event: ExportEventCommentEdition, + } +} + +func NewExportStatusChange(id string) ExportResult { + return ExportResult{ + ID: id, + Event: ExportEventStatusChange, + } +} + +func NewExportLabelChange(id string) ExportResult { + return ExportResult{ + ID: id, + Event: ExportEventLabelChange, + } +} + +func NewExportTitleEdition(id string) ExportResult { + return ExportResult{ + ID: id, + Event: ExportEventTitleEdition, + } +} diff --git a/bridge/core/interfaces.go b/bridge/core/interfaces.go index 37fdb3d7..76d66fb4 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, error) } |