Skip to content

Commit 5ebf499

Browse files
lunnyzeripath
authored andcommitted
Fix repository's pull request count error (#7518) (#7524)
* fix pr count error * fix tests
1 parent 3fd07a0 commit 5ebf499

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

models/issue.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,3 +1835,22 @@ func (issue *Issue) BlockedByDependencies() ([]*Issue, error) {
18351835
func (issue *Issue) BlockingDependencies() ([]*Issue, error) {
18361836
return issue.getBlockingDependencies(x)
18371837
}
1838+
1839+
func (issue *Issue) updateClosedNum(e Engine) (err error) {
1840+
if issue.IsPull {
1841+
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=(SELECT count(*) FROM issue WHERE repo_id=? AND is_pull=? AND is_closed=?) WHERE id=?",
1842+
issue.RepoID,
1843+
true,
1844+
true,
1845+
issue.RepoID,
1846+
)
1847+
} else {
1848+
_, err = e.Exec("UPDATE `repository` SET num_closed_issues=(SELECT count(*) FROM issue WHERE repo_id=? AND is_pull=? AND is_closed=?) WHERE id=?",
1849+
issue.RepoID,
1850+
false,
1851+
true,
1852+
issue.RepoID,
1853+
)
1854+
}
1855+
return
1856+
}

models/issue_comment.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -632,12 +632,7 @@ func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, commen
632632
act.OpType = ActionReopenPullRequest
633633
}
634634

635-
if opts.Issue.IsPull {
636-
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls-1 WHERE id=?", opts.Repo.ID)
637-
} else {
638-
_, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues-1 WHERE id=?", opts.Repo.ID)
639-
}
640-
if err != nil {
635+
if err = opts.Issue.updateClosedNum(e); err != nil {
641636
return err
642637
}
643638

@@ -647,12 +642,7 @@ func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, commen
647642
act.OpType = ActionClosePullRequest
648643
}
649644

650-
if opts.Issue.IsPull {
651-
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls+1 WHERE id=?", opts.Repo.ID)
652-
} else {
653-
_, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues+1 WHERE id=?", opts.Repo.ID)
654-
}
655-
if err != nil {
645+
if err = opts.Issue.updateClosedNum(e); err != nil {
656646
return err
657647
}
658648
}

models/repo.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2327,6 +2327,23 @@ func CheckRepoStats() {
23272327
}
23282328
// ***** END: Repository.NumClosedIssues *****
23292329

2330+
// ***** START: Repository.NumClosedPulls *****
2331+
desc = "repository count 'num_closed_pulls'"
2332+
results, err = x.Query("SELECT repo.id FROM `repository` repo WHERE repo.num_closed_pulls!=(SELECT COUNT(*) FROM `issue` WHERE repo_id=repo.id AND is_closed=? AND is_pull=?)", true, true)
2333+
if err != nil {
2334+
log.Error("Select %s: %v", desc, err)
2335+
} else {
2336+
for _, result := range results {
2337+
id := com.StrTo(result["id"]).MustInt64()
2338+
log.Trace("Updating %s: %d", desc, id)
2339+
_, err = x.Exec("UPDATE `repository` SET num_closed_pulls=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_closed=? AND is_pull=?) WHERE id=?", id, true, true, id)
2340+
if err != nil {
2341+
log.Error("Update %s[%d]: %v", desc, id, err)
2342+
}
2343+
}
2344+
}
2345+
// ***** END: Repository.NumClosedPulls *****
2346+
23302347
// FIXME: use checker when stop supporting old fork repo format.
23312348
// ***** START: Repository.NumForks *****
23322349
results, err = x.Query("SELECT repo.id FROM `repository` repo WHERE repo.num_forks!=(SELECT COUNT(*) FROM `repository` WHERE fork_id=repo.id)")

0 commit comments

Comments
 (0)