@@ -11,7 +11,6 @@ import (
11
11
)
12
12
13
13
func addBranchProtectionCanPushAndEnableWhitelist (x * xorm.Engine ) error {
14
-
15
14
type ProtectedBranch struct {
16
15
CanPush bool `xorm:"NOT NULL DEFAULT false"`
17
16
EnableApprovalsWhitelist bool `xorm:"NOT NULL DEFAULT false"`
@@ -23,29 +22,26 @@ func addBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
23
22
Official bool `xorm:"NOT NULL DEFAULT false"`
24
23
}
25
24
26
- sess := x .NewSession ()
27
- defer sess .Close ()
28
-
29
- if err := sess .Sync2 (new (ProtectedBranch )); err != nil {
25
+ if err := x .Sync2 (new (ProtectedBranch )); err != nil {
30
26
return err
31
27
}
32
28
33
- if err := sess .Sync2 (new (Review )); err != nil {
29
+ if err := x .Sync2 (new (Review )); err != nil {
34
30
return err
35
31
}
36
32
37
- if _ , err := sess .Exec ("UPDATE `protected_branch` SET `enable_whitelist` = ? WHERE enable_whitelist IS NULL" , false ); err != nil {
33
+ if _ , err := x .Exec ("UPDATE `protected_branch` SET `enable_whitelist` = ? WHERE enable_whitelist IS NULL" , false ); err != nil {
38
34
return err
39
35
}
40
- if _ , err := sess .Exec ("UPDATE `protected_branch` SET `can_push` = `enable_whitelist`" ); err != nil {
36
+ if _ , err := x .Exec ("UPDATE `protected_branch` SET `can_push` = `enable_whitelist`" ); err != nil {
41
37
return err
42
38
}
43
- if _ , err := sess .Exec ("UPDATE `protected_branch` SET `enable_approvals_whitelist` = ? WHERE `required_approvals` > ?" , true , 0 ); err != nil {
39
+ if _ , err := x .Exec ("UPDATE `protected_branch` SET `enable_approvals_whitelist` = ? WHERE `required_approvals` > ?" , true , 0 ); err != nil {
44
40
return err
45
41
}
46
42
47
43
var pageSize int64 = 20
48
- qresult , err := sess .QueryInterface ("SELECT max(id) as max_id FROM issue" )
44
+ qresult , err := x .QueryInterface ("SELECT max(id) as max_id FROM issue" )
49
45
if err != nil {
50
46
return err
51
47
}
@@ -57,34 +53,57 @@ func addBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
57
53
}
58
54
totalPages := totalIssues / pageSize
59
55
56
+ sess := x .NewSession ()
57
+ defer sess .Close ()
58
+
59
+ if err := sess .Begin (); err != nil {
60
+ return err
61
+ }
62
+
60
63
// Find latest review of each user in each pull request, and set official field if appropriate
61
- reviews := [] * models. Review {}
64
+
62
65
var page int64
66
+ var count int
63
67
for page = 0 ; page <= totalPages ; page ++ {
68
+ reviews := []* models.Review {}
64
69
if err := sess .SQL ("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id > ? AND issue_id <= ? AND type in (?, ?) GROUP BY issue_id, reviewer_id)" ,
65
70
page * pageSize , (page + 1 )* pageSize , models .ReviewTypeApprove , models .ReviewTypeReject ).
66
71
Find (& reviews ); err != nil {
67
72
return err
68
73
}
69
74
70
75
for _ , review := range reviews {
71
- if err := review .LoadAttributes ( ); err != nil {
76
+ if err := review .LoadAttributesX ( sess ); err != nil {
72
77
// Error might occur if user or issue doesn't exist, ignore it.
73
78
continue
74
79
}
75
- official , err := models .IsOfficialReviewer ( review .Issue , review .Reviewer )
80
+ official , err := models .IsOfficialReviewerX ( sess , review .Issue , review .Reviewer )
76
81
if err != nil {
77
82
// Branch might not be proteced or other error, ignore it.
78
83
continue
79
84
}
80
85
review .Official = official
81
86
87
+ count ++
88
+
82
89
if _ , err := sess .ID (review .ID ).Cols ("official" ).Update (review ); err != nil {
83
90
return err
84
91
}
85
- }
86
92
93
+ if count == 100 {
94
+ if err := sess .Commit (); err != nil {
95
+ return err
96
+ }
97
+ count = 0
98
+ if err := sess .Begin (); err != nil {
99
+ return err
100
+ }
101
+ }
102
+ }
87
103
}
88
104
89
- return sess .Commit ()
105
+ if count > 0 {
106
+ return sess .Commit ()
107
+ }
108
+ return nil
90
109
}
0 commit comments