forked from mirror/gitea
Fix issues count bug (#21557)
fix #19349 , #19505 Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
parent
29c00eb1ed
commit
5e8e3ecbeb
@ -886,7 +886,7 @@ func updateCommentInfos(ctx context.Context, opts *CreateCommentOptions, comment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case CommentTypeReopen, CommentTypeClose:
|
case CommentTypeReopen, CommentTypeClose:
|
||||||
if err = updateIssueClosedNum(ctx, opts.Issue); err != nil {
|
if err = repo_model.UpdateRepoIssueNumbers(ctx, opts.Issue.RepoID, opts.Issue.IsPull, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -725,7 +725,8 @@ func doChangeIssueStatus(ctx context.Context, issue *Issue, doer *user_model.Use
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := updateIssueClosedNum(ctx, issue); err != nil {
|
// update repository's issue closed number
|
||||||
|
if err := repo_model.UpdateRepoIssueNumbers(ctx, issue.RepoID, issue.IsPull, true); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2137,15 +2138,6 @@ func (issue *Issue) BlockingDependencies(ctx context.Context) (issueDeps []*Depe
|
|||||||
return issueDeps, err
|
return issueDeps, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateIssueClosedNum(ctx context.Context, issue *Issue) (err error) {
|
|
||||||
if issue.IsPull {
|
|
||||||
err = repo_model.StatsCorrectNumClosed(ctx, issue.RepoID, true, "num_closed_pulls")
|
|
||||||
} else {
|
|
||||||
err = repo_model.StatsCorrectNumClosed(ctx, issue.RepoID, false, "num_closed_issues")
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindAndUpdateIssueMentions finds users mentioned in the given content string, and saves them in the database.
|
// FindAndUpdateIssueMentions finds users mentioned in the given content string, and saves them in the database.
|
||||||
func FindAndUpdateIssueMentions(ctx context.Context, issue *Issue, doer *user_model.User, content string) (mentions []*user_model.User, err error) {
|
func FindAndUpdateIssueMentions(ctx context.Context, issue *Issue, doer *user_model.User, content string) (mentions []*user_model.User, err error) {
|
||||||
rawMentions := references.FindAllMentionsMarkdown(content)
|
rawMentions := references.FindAllMentionsMarkdown(content)
|
||||||
|
@ -404,24 +404,19 @@ func repoStatsCorrectIssueNumComments(ctx context.Context, id int64) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func repoStatsCorrectNumIssues(ctx context.Context, id int64) error {
|
func repoStatsCorrectNumIssues(ctx context.Context, id int64) error {
|
||||||
return repoStatsCorrectNum(ctx, id, false, "num_issues")
|
return repo_model.UpdateRepoIssueNumbers(ctx, id, false, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func repoStatsCorrectNumPulls(ctx context.Context, id int64) error {
|
func repoStatsCorrectNumPulls(ctx context.Context, id int64) error {
|
||||||
return repoStatsCorrectNum(ctx, id, true, "num_pulls")
|
return repo_model.UpdateRepoIssueNumbers(ctx, id, true, false)
|
||||||
}
|
|
||||||
|
|
||||||
func repoStatsCorrectNum(ctx context.Context, id int64, isPull bool, field string) error {
|
|
||||||
_, err := db.GetEngine(ctx).Exec("UPDATE `repository` SET "+field+"=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_pull=?) WHERE id=?", id, isPull, id)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func repoStatsCorrectNumClosedIssues(ctx context.Context, id int64) error {
|
func repoStatsCorrectNumClosedIssues(ctx context.Context, id int64) error {
|
||||||
return repo_model.StatsCorrectNumClosed(ctx, id, false, "num_closed_issues")
|
return repo_model.UpdateRepoIssueNumbers(ctx, id, false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func repoStatsCorrectNumClosedPulls(ctx context.Context, id int64) error {
|
func repoStatsCorrectNumClosedPulls(ctx context.Context, id int64) error {
|
||||||
return repo_model.StatsCorrectNumClosed(ctx, id, true, "num_closed_pulls")
|
return repo_model.UpdateRepoIssueNumbers(ctx, id, true, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func statsQuery(args ...interface{}) func(context.Context) ([]map[string][]byte, error) {
|
func statsQuery(args ...interface{}) func(context.Context) ([]map[string][]byte, error) {
|
||||||
|
@ -765,35 +765,30 @@ func CountRepositories(ctx context.Context, opts CountRepositoryOptions) (int64,
|
|||||||
return count, nil
|
return count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// StatsCorrectNumClosed update repository's issue related numbers
|
// UpdateRepoIssueNumbers updates one of a repositories amount of (open|closed) (issues|PRs) with the current count
|
||||||
func StatsCorrectNumClosed(ctx context.Context, id int64, isPull bool, field string) error {
|
|
||||||
_, err := db.Exec(ctx, "UPDATE `repository` SET "+field+"=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_closed=? AND is_pull=?) WHERE id=?", id, true, isPull, id)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateRepoIssueNumbers update repository issue numbers
|
|
||||||
func UpdateRepoIssueNumbers(ctx context.Context, repoID int64, isPull, isClosed bool) error {
|
func UpdateRepoIssueNumbers(ctx context.Context, repoID int64, isPull, isClosed bool) error {
|
||||||
e := db.GetEngine(ctx)
|
field := "num_"
|
||||||
if isPull {
|
if isClosed {
|
||||||
if _, err := e.ID(repoID).Decr("num_pulls").Update(new(Repository)); err != nil {
|
field += "closed_"
|
||||||
return err
|
|
||||||
}
|
|
||||||
if isClosed {
|
|
||||||
if _, err := e.ID(repoID).Decr("num_closed_pulls").Update(new(Repository)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if _, err := e.ID(repoID).Decr("num_issues").Update(new(Repository)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if isClosed {
|
|
||||||
if _, err := e.ID(repoID).Decr("num_closed_issues").Update(new(Repository)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
if isPull {
|
||||||
|
field += "pulls"
|
||||||
|
} else {
|
||||||
|
field += "issues"
|
||||||
|
}
|
||||||
|
|
||||||
|
subQuery := builder.Select("count(*)").
|
||||||
|
From("issue").Where(builder.Eq{
|
||||||
|
"repo_id": repoID,
|
||||||
|
"is_pull": isPull,
|
||||||
|
}.And(builder.If(isClosed, builder.Eq{"is_closed": isClosed})))
|
||||||
|
|
||||||
|
// builder.Update(cond) will generate SQL like UPDATE ... SET cond
|
||||||
|
query := builder.Update(builder.Eq{field: subQuery}).
|
||||||
|
From("repository").
|
||||||
|
Where(builder.Eq{"id": repoID})
|
||||||
|
_, err := db.Exec(ctx, query)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// CountNullArchivedRepository counts the number of repositories with is_archived is null
|
// CountNullArchivedRepository counts the number of repositories with is_archived is null
|
||||||
|
Loading…
Reference in New Issue
Block a user