]> source.dussan.org Git - gitea.git/commitdiff
Fix repository's pull request count error (#7518) (#7524)
authorLunny Xiao <xiaolunwen@gmail.com>
Fri, 19 Jul 2019 06:40:16 +0000 (14:40 +0800)
committerzeripath <art27@cantab.net>
Fri, 19 Jul 2019 06:40:16 +0000 (07:40 +0100)
* fix pr count error

* fix tests

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

index b5504beb71bcd77c7316645a504a0b4665ac8479..20af154b36b1466055dc413b97881c8b42f33113 100644 (file)
@@ -1835,3 +1835,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 c9f1bd9d5f22d5597e467362f9713ca9cc68c5ec..d5e10fa64506de7e4a7f86d28fa26a2d7b4321d6 100644 (file)
@@ -632,12 +632,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
                }
 
@@ -647,12 +642,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 59ce18fa88e9ec725da0c1cc30eacec3ad3c43e4..d95ebf10e300c949df432e2f90abad993c08d792 100644 (file)
@@ -2327,6 +2327,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)")