]> source.dussan.org Git - gitea.git/commitdiff
Fix repository's pull request count error (#7518)
authorLunny Xiao <xiaolunwen@gmail.com>
Thu, 18 Jul 2019 21:51:33 +0000 (05:51 +0800)
committerzeripath <art27@cantab.net>
Thu, 18 Jul 2019 21:51:33 +0000 (22:51 +0100)
* fix pr count error

* fix tests

models/issue.go
models/issue_comment.go
models/repo.go

index bde5758b0269333fcf0f1dc6666e199b037200ce..7561083e0fc69546a9b0f433ffe4f8984ef0ddcf 100644 (file)
@@ -1849,3 +1849,22 @@ func (issue *Issue) BlockedByDependencies() ([]*Issue, error) {
 func (issue *Issue) BlockingDependencies() ([]*Issue, error) {
        return issue.getBlockingDependencies(x)
 }
+
+func (issue *Issue) updateClosedNum(e Engine) (err error) {
+       if issue.IsPull {
+               _, err = e.Exec("UPDATE `repository` SET num_closed_pulls=(SELECT count(*) FROM issue WHERE repo_id=? AND is_pull=? AND is_closed=?) WHERE id=?",
+                       issue.RepoID,
+                       true,
+                       true,
+                       issue.RepoID,
+               )
+       } else {
+               _, err = e.Exec("UPDATE `repository` SET num_closed_issues=(SELECT count(*) FROM issue WHERE repo_id=? AND is_pull=? AND is_closed=?) WHERE id=?",
+                       issue.RepoID,
+                       false,
+                       true,
+                       issue.RepoID,
+               )
+       }
+       return
+}
index b930b0b12a2f70fa916add282df342c3645e22d6..5e7ebc0cf3e77141fcc28431fd75ee374795dfac 100644 (file)
@@ -634,12 +634,7 @@ func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, commen
                        act.OpType = ActionReopenPullRequest
                }
 
-               if opts.Issue.IsPull {
-                       _, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls-1 WHERE id=?", opts.Repo.ID)
-               } else {
-                       _, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues-1 WHERE id=?", opts.Repo.ID)
-               }
-               if err != nil {
+               if err = opts.Issue.updateClosedNum(e); err != nil {
                        return err
                }
 
@@ -649,12 +644,7 @@ func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, commen
                        act.OpType = ActionClosePullRequest
                }
 
-               if opts.Issue.IsPull {
-                       _, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls+1 WHERE id=?", opts.Repo.ID)
-               } else {
-                       _, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues+1 WHERE id=?", opts.Repo.ID)
-               }
-               if err != nil {
+               if err = opts.Issue.updateClosedNum(e); err != nil {
                        return err
                }
        }
index c60488844c8ab99d9eed398935e06bb9c28532fb..ba141553957463b2f743d9c71f4d88e4d474b857 100644 (file)
@@ -2311,6 +2311,23 @@ func CheckRepoStats() {
        }
        // ***** END: Repository.NumClosedIssues *****
 
+       // ***** START: Repository.NumClosedPulls *****
+       desc = "repository count 'num_closed_pulls'"
+       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)
+       if err != nil {
+               log.Error("Select %s: %v", desc, err)
+       } else {
+               for _, result := range results {
+                       id := com.StrTo(result["id"]).MustInt64()
+                       log.Trace("Updating %s: %d", desc, id)
+                       _, 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)
+                       if err != nil {
+                               log.Error("Update %s[%d]: %v", desc, id, err)
+                       }
+               }
+       }
+       // ***** END: Repository.NumClosedPulls *****
+
        // FIXME: use checker when stop supporting old fork repo format.
        // ***** START: Repository.NumForks *****
        results, err = x.Query("SELECT repo.id FROM `repository` repo WHERE repo.num_forks!=(SELECT COUNT(*) FROM `repository` WHERE fork_id=repo.id)")