aboutsummaryrefslogtreecommitdiffstats
path: root/bridge/core
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/core')
-rw-r--r--bridge/core/bridge.go8
-rw-r--r--bridge/core/export.go101
-rw-r--r--bridge/core/interfaces.go2
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)
}