Skip to content

Commit 1f7effe

Browse files
committed
migrate already open pulls
1 parent 3d2ca63 commit 1f7effe

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

models/migrations/v999.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
package migrations
66

77
import (
8+
"fmt"
9+
10+
"code.gitea.io/gitea/models"
11+
"code.gitea.io/gitea/modules/setting"
12+
pull_service "code.gitea.io/gitea/services/pull"
13+
814
"xorm.io/xorm"
915
)
1016

@@ -13,5 +19,44 @@ func addCommitDivergenceToPulls(x *xorm.Engine) error {
1319
CommitsAhead int
1420
CommitsBehind int
1521
}
16-
return x.Sync2(new(PullRequest))
22+
if err := x.Sync2(new(PullRequest)); err != nil {
23+
return fmt.Errorf("Sync2: %v", err)
24+
}
25+
26+
var last int
27+
batchSize := setting.Database.IterateBufferSize
28+
sess := x.NewSession()
29+
defer sess.Close()
30+
for {
31+
if err := sess.Begin(); err != nil {
32+
return err
33+
}
34+
var results = make([]*models.PullRequest, 0, batchSize)
35+
err := sess.Where("has_merged = ?", false).OrderBy("id").Limit(batchSize, last).Find(&results)
36+
if err != nil {
37+
return err
38+
}
39+
if len(results) == 0 {
40+
break
41+
}
42+
last += len(results)
43+
44+
for _, pr := range results {
45+
divergence, err := pull_service.GetDiverging(pr)
46+
if err != nil {
47+
return fmt.Errorf("GetDiverging: %v", err)
48+
} else {
49+
pr.CommitsAhead = divergence.Ahead
50+
pr.CommitsBehind = divergence.Behind
51+
if _, err = sess.ID(pr.ID).Cols("commits_ahead", "commits_behind").Update(pr); err != nil {
52+
return fmt.Errorf("Update Cols: %v", err)
53+
}
54+
}
55+
}
56+
57+
if err := sess.Commit(); err != nil {
58+
return err
59+
}
60+
}
61+
return nil
1762
}

0 commit comments

Comments
 (0)