You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

v130.go 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package migrations
  5. import (
  6. "encoding/json"
  7. "xorm.io/xorm"
  8. )
  9. func expandWebhooks(x *xorm.Engine) error {
  10. type ChooseEvents struct {
  11. Issues bool `json:"issues"`
  12. IssueAssign bool `json:"issue_assign"`
  13. IssueLabel bool `json:"issue_label"`
  14. IssueMilestone bool `json:"issue_milestone"`
  15. IssueComment bool `json:"issue_comment"`
  16. PullRequest bool `json:"pull_request"`
  17. PullRequestAssign bool `json:"pull_request_assign"`
  18. PullRequestLabel bool `json:"pull_request_label"`
  19. PullRequestMilestone bool `json:"pull_request_milestone"`
  20. PullRequestComment bool `json:"pull_request_comment"`
  21. PullRequestReview bool `json:"pull_request_review"`
  22. PullRequestSync bool `json:"pull_request_sync"`
  23. }
  24. type Events struct {
  25. PushOnly bool `json:"push_only"`
  26. SendEverything bool `json:"send_everything"`
  27. ChooseEvents bool `json:"choose_events"`
  28. BranchFilter string `json:"branch_filter"`
  29. Events ChooseEvents `json:"events"`
  30. }
  31. type Webhook struct {
  32. ID int64
  33. Events string
  34. }
  35. var events Events
  36. var bytes []byte
  37. var last int
  38. const batchSize = 50
  39. sess := x.NewSession()
  40. defer sess.Close()
  41. for {
  42. if err := sess.Begin(); err != nil {
  43. return err
  44. }
  45. var results = make([]Webhook, 0, batchSize)
  46. err := x.OrderBy("id").
  47. Limit(batchSize, last).
  48. Find(&results)
  49. if err != nil {
  50. return err
  51. }
  52. if len(results) == 0 {
  53. break
  54. }
  55. last += len(results)
  56. for _, res := range results {
  57. if err = json.Unmarshal([]byte(res.Events), &events); err != nil {
  58. return err
  59. }
  60. if events.Events.Issues {
  61. events.Events.IssueAssign = true
  62. events.Events.IssueLabel = true
  63. events.Events.IssueMilestone = true
  64. events.Events.IssueComment = true
  65. }
  66. if events.Events.PullRequest {
  67. events.Events.PullRequestAssign = true
  68. events.Events.PullRequestLabel = true
  69. events.Events.PullRequestMilestone = true
  70. events.Events.PullRequestComment = true
  71. events.Events.PullRequestReview = true
  72. events.Events.PullRequestSync = true
  73. }
  74. if bytes, err = json.Marshal(&events); err != nil {
  75. return err
  76. }
  77. _, err = sess.Exec("UPDATE webhook SET events = ? WHERE id = ?", string(bytes), res.ID)
  78. if err != nil {
  79. return err
  80. }
  81. }
  82. if err := sess.Commit(); err != nil {
  83. return err
  84. }
  85. }
  86. return nil
  87. }