1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
package core
import (
"fmt"
"github.com/git-bug/git-bug/entity"
)
type ExportEvent int
const (
_ ExportEvent = iota
// Bug has been exported on the remote tracker
ExportEventBug
// Comment has been exported on the remote tracker
ExportEventComment
// Comment has been edited on the remote tracker
ExportEventCommentEdition
// Bug's status has been changed on the remote tracker
ExportEventStatusChange
// Bug's title has been changed on the remote tracker
ExportEventTitleEdition
// Bug's labels have been changed on the remote tracker
ExportEventLabelChange
// Nothing changed on the bug
ExportEventNothing
// Something wrong happened during export that is worth notifying to the user
// but not severe enough to consider the export a failure.
ExportEventWarning
// The export system (web API) has reached a rate limit
ExportEventRateLimiting
// Error happened during export
ExportEventError
)
// ExportResult is an event that is emitted during the export process, to
// allow calling code to report on what is happening, collect metrics or
// display meaningful errors if something went wrong.
type ExportResult struct {
Err error
Event ExportEvent
EntityId entity.Id // optional for err, warning
Reason string
}
func (er ExportResult) String() string {
switch er.Event {
case ExportEventBug:
return fmt.Sprintf("[%s] new issue: %s", er.EntityId.Human(), er.EntityId)
case ExportEventComment:
return fmt.Sprintf("[%s] new comment", er.EntityId.Human())
case ExportEventCommentEdition:
return fmt.Sprintf("[%s] updated comment", er.EntityId.Human())
case ExportEventStatusChange:
return fmt.Sprintf("[%s] changed status", er.EntityId.Human())
case ExportEventTitleEdition:
return fmt.Sprintf("[%s] changed title", er.EntityId.Human())
case ExportEventLabelChange:
return fmt.Sprintf("[%s] changed label", er.EntityId.Human())
case ExportEventNothing:
if er.EntityId != "" {
return fmt.Sprintf("no actions taken on entity %s: %s", er.EntityId, er.Reason)
}
return fmt.Sprintf("no actions taken: %s", er.Reason)
case ExportEventError:
if er.EntityId != "" {
return fmt.Sprintf("export error on entity %s: %s", er.EntityId, er.Err.Error())
}
return fmt.Sprintf("export error: %s", er.Err.Error())
case ExportEventWarning:
if er.EntityId != "" {
return fmt.Sprintf("warning on entity %s: %s", er.EntityId, er.Err.Error())
}
return fmt.Sprintf("warning: %s", er.Err.Error())
case ExportEventRateLimiting:
return fmt.Sprintf("rate limiting: %s", er.Reason)
default:
panic("unknown export result")
}
}
func NewExportError(err error, entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Err: err,
Event: ExportEventError,
}
}
func NewExportWarning(err error, entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Err: err,
Event: ExportEventWarning,
}
}
func NewExportNothing(entityId entity.Id, reason string) ExportResult {
return ExportResult{
EntityId: entityId,
Reason: reason,
Event: ExportEventNothing,
}
}
func NewExportBug(entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Event: ExportEventBug,
}
}
func NewExportComment(entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Event: ExportEventComment,
}
}
func NewExportCommentEdition(entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Event: ExportEventCommentEdition,
}
}
func NewExportStatusChange(entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Event: ExportEventStatusChange,
}
}
func NewExportLabelChange(entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Event: ExportEventLabelChange,
}
}
func NewExportTitleEdition(entityId entity.Id) ExportResult {
return ExportResult{
EntityId: entityId,
Event: ExportEventTitleEdition,
}
}
func NewExportRateLimiting(msg string) ExportResult {
return ExportResult{
Reason: msg,
Event: ExportEventRateLimiting,
}
}
|