...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package common
16
17 import (
18 "fmt"
19 "strings"
20 )
21
22
23
24
25 type Trigger uint32
26
27 const (
28 TriggerCommit Trigger = 1 << iota
29 TriggerComment
30 TriggerReview
31 TriggerLabel
32 TriggerStatus
33 TriggerPullRequest
34
35
36
37 TriggerStatic Trigger = 0
38
39
40
41 TriggerAll Trigger = TriggerCommit | TriggerComment | TriggerReview | TriggerLabel | TriggerStatus | TriggerPullRequest
42 )
43
44
45 var triggerStrings = []struct {
46 T Trigger
47 S string
48 }{
49 {TriggerCommit, "Commit"},
50 {TriggerComment, "Comment"},
51 {TriggerReview, "Review"},
52 {TriggerLabel, "Label"},
53 {TriggerStatus, "Status"},
54 {TriggerPullRequest, "PullRequest"},
55 }
56
57
58 func (t Trigger) Matches(flags Trigger) bool {
59 return t&flags > 0
60 }
61
62 func (t Trigger) String() string {
63 if t == TriggerStatic {
64 return "Trigger(0x0=Static)"
65 }
66
67 var s strings.Builder
68 fmt.Fprintf(&s, "Trigger(0x%x", uint32(t))
69
70 i := 0
71 for _, ts := range triggerStrings {
72 if t.Matches(ts.T) {
73 if i == 0 {
74 s.WriteString("=")
75 } else {
76 s.WriteString("|")
77 }
78 s.WriteString(ts.S)
79 i++
80 }
81 }
82 s.WriteString(")")
83 return s.String()
84 }
85
86
87
88 type Triggered interface {
89 Trigger() Trigger
90 }
91
View as plain text