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