Fix repository's pull request count error (#7518)
* fix pr count error * fix tests
This commit is contained in:
		
							parent
							
								
									f9d6e35a8a
								
							
						
					
					
						commit
						e0d6d2f978
					
				
					 3 changed files with 38 additions and 12 deletions
				
			
		|  | @ -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 | ||||
| } | ||||
|  |  | |||
|  | @ -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 | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -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)") | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue