aboutsummaryrefslogtreecommitdiffstats
path: root/models/migrations/v130.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/migrations/v130.go')
-rw-r--r--models/migrations/v130.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/models/migrations/v130.go b/models/migrations/v130.go
new file mode 100644
index 0000000000..3a7efedf86
--- /dev/null
+++ b/models/migrations/v130.go
@@ -0,0 +1,101 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "encoding/json"
+
+ "xorm.io/xorm"
+)
+
+func expandWebhooks(x *xorm.Engine) error {
+
+ type ChooseEvents struct {
+ Issues bool `json:"issues"`
+ IssueAssign bool `json:"issue_assign"`
+ IssueLabel bool `json:"issue_label"`
+ IssueMilestone bool `json:"issue_milestone"`
+ IssueComment bool `json:"issue_comment"`
+ PullRequest bool `json:"pull_request"`
+ PullRequestAssign bool `json:"pull_request_assign"`
+ PullRequestLabel bool `json:"pull_request_label"`
+ PullRequestMilestone bool `json:"pull_request_milestone"`
+ PullRequestComment bool `json:"pull_request_comment"`
+ PullRequestReview bool `json:"pull_request_review"`
+ PullRequestSync bool `json:"pull_request_sync"`
+ }
+
+ type Events struct {
+ PushOnly bool `json:"push_only"`
+ SendEverything bool `json:"send_everything"`
+ ChooseEvents bool `json:"choose_events"`
+ BranchFilter string `json:"branch_filter"`
+ Events ChooseEvents `json:"events"`
+ }
+
+ type Webhook struct {
+ ID int64
+ Events string
+ }
+
+ var events Events
+ var bytes []byte
+ var last int
+ const batchSize = 50
+ sess := x.NewSession()
+ defer sess.Close()
+ for {
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ var results = make([]Webhook, 0, batchSize)
+ err := x.OrderBy("id").
+ Limit(batchSize, last).
+ Find(&results)
+ if err != nil {
+ return err
+ }
+ if len(results) == 0 {
+ break
+ }
+ last += len(results)
+
+ for _, res := range results {
+ if err = json.Unmarshal([]byte(res.Events), &events); err != nil {
+ return err
+ }
+
+ if events.Events.Issues {
+ events.Events.IssueAssign = true
+ events.Events.IssueLabel = true
+ events.Events.IssueMilestone = true
+ events.Events.IssueComment = true
+ }
+
+ if events.Events.PullRequest {
+ events.Events.PullRequestAssign = true
+ events.Events.PullRequestLabel = true
+ events.Events.PullRequestMilestone = true
+ events.Events.PullRequestComment = true
+ events.Events.PullRequestReview = true
+ events.Events.PullRequestSync = true
+ }
+
+ if bytes, err = json.Marshal(&events); err != nil {
+ return err
+ }
+
+ _, err = sess.Exec("UPDATE webhook SET events = ? WHERE id = ?", string(bytes), res.ID)
+ if err != nil {
+ return err
+ }
+ }
+
+ if err := sess.Commit(); err != nil {
+ return err
+ }
+ }
+ return nil
+}