code.gitea.io/gitea@v1.21.7/models/migrations/v1_12/v130.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_12 //nolint 5 6 import ( 7 "code.gitea.io/gitea/modules/json" 8 "code.gitea.io/gitea/modules/setting" 9 10 "xorm.io/xorm" 11 ) 12 13 func ExpandWebhooks(x *xorm.Engine) error { 14 type HookEvents struct { 15 Create bool `json:"create"` 16 Delete bool `json:"delete"` 17 Fork bool `json:"fork"` 18 Issues bool `json:"issues"` 19 IssueAssign bool `json:"issue_assign"` 20 IssueLabel bool `json:"issue_label"` 21 IssueMilestone bool `json:"issue_milestone"` 22 IssueComment bool `json:"issue_comment"` 23 Push bool `json:"push"` 24 PullRequest bool `json:"pull_request"` 25 PullRequestAssign bool `json:"pull_request_assign"` 26 PullRequestLabel bool `json:"pull_request_label"` 27 PullRequestMilestone bool `json:"pull_request_milestone"` 28 PullRequestComment bool `json:"pull_request_comment"` 29 PullRequestReview bool `json:"pull_request_review"` 30 PullRequestSync bool `json:"pull_request_sync"` 31 Repository bool `json:"repository"` 32 Release bool `json:"release"` 33 } 34 35 type HookEvent struct { 36 PushOnly bool `json:"push_only"` 37 SendEverything bool `json:"send_everything"` 38 ChooseEvents bool `json:"choose_events"` 39 BranchFilter string `json:"branch_filter"` 40 41 HookEvents `json:"events"` 42 } 43 44 type Webhook struct { 45 ID int64 46 Events string 47 } 48 49 var bytes []byte 50 var last int 51 batchSize := setting.Database.IterateBufferSize 52 sess := x.NewSession() 53 defer sess.Close() 54 for { 55 if err := sess.Begin(); err != nil { 56 return err 57 } 58 results := make([]Webhook, 0, batchSize) 59 err := x.OrderBy("id"). 60 Limit(batchSize, last). 61 Find(&results) 62 if err != nil { 63 return err 64 } 65 if len(results) == 0 { 66 break 67 } 68 last += len(results) 69 70 for _, res := range results { 71 var events HookEvent 72 if err = json.Unmarshal([]byte(res.Events), &events); err != nil { 73 return err 74 } 75 76 if !events.ChooseEvents { 77 continue 78 } 79 80 if events.Issues { 81 events.IssueAssign = true 82 events.IssueLabel = true 83 events.IssueMilestone = true 84 events.IssueComment = true 85 } 86 87 if events.PullRequest { 88 events.PullRequestAssign = true 89 events.PullRequestLabel = true 90 events.PullRequestMilestone = true 91 events.PullRequestComment = true 92 events.PullRequestReview = true 93 events.PullRequestSync = true 94 } 95 96 if bytes, err = json.Marshal(&events); err != nil { 97 return err 98 } 99 100 _, err = sess.Exec("UPDATE webhook SET events = ? WHERE id = ?", string(bytes), res.ID) 101 if err != nil { 102 return err 103 } 104 } 105 106 if err := sess.Commit(); err != nil { 107 return err 108 } 109 } 110 return nil 111 }