@@ -145,22 +145,19 @@ func updateIssueNumbers(ctx context.Context, issue *Issue, doer *user_model.User
145145 }
146146 }
147147
148- colName := util .Iif (issue .IsPull , "num_closed_pulls" , "num_closed_issues" )
149- dbSession := db .GetEngine (ctx )
150148 // update repository's issue closed number
151149 switch cmtType {
152150 case CommentTypeClose , CommentTypeMergePull :
153- dbSession .Incr (colName )
151+ if err := DecrRepoIssueNumbers (ctx , issue .RepoID , issue .IsPull , false ); err != nil {
152+ return nil , err
153+ }
154154 case CommentTypeReopen :
155- dbSession .Decr (colName )
155+ if err := IncrRepoIssueNumbers (ctx , issue .RepoID , issue .IsPull ); err != nil {
156+ return nil , err
157+ }
156158 default :
157159 return nil , fmt .Errorf ("invalid comment type: %d" , cmtType )
158160 }
159- if _ , err := dbSession .ID (issue .RepoID ).
160- NoAutoCondition ().NoAutoTime ().
161- Update (new (repo_model.Repository )); err != nil {
162- return nil , err
163- }
164161
165162 return CreateComment (ctx , & CreateCommentOptions {
166163 Type : cmtType ,
@@ -381,10 +378,7 @@ func NewIssueWithIndex(ctx context.Context, doer *user_model.User, opts NewIssue
381378 }
382379
383380 // Update repository issue count
384- colName := util .Iif (opts .Issue .IsPull , "num_pulls" , "num_issues" )
385- if _ , err := db .GetEngine (ctx ).Incr (colName ).ID (opts .Repo .ID ).
386- NoAutoCondition ().NoAutoTime ().
387- Update (new (repo_model.Repository )); err != nil {
381+ if err := IncrRepoIssueNumbers (ctx , opts .Repo .ID , opts .Issue .IsPull ); err != nil {
388382 return err
389383 }
390384
@@ -454,6 +448,27 @@ func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, la
454448 })
455449}
456450
451+ func IncrRepoIssueNumbers (ctx context.Context , repoID int64 , isPull bool ) error {
452+ colName := util .Iif (isPull , "num_pulls" , "num_issues" )
453+ _ , err := db .GetEngine (ctx ).Incr (colName ).ID (repoID ).
454+ NoAutoCondition ().NoAutoTime ().
455+ Update (new (repo_model.Repository ))
456+ return err
457+ }
458+
459+ func DecrRepoIssueNumbers (ctx context.Context , repoID int64 , isPull , includeTotal bool ) error {
460+ closedColName := util .Iif (isPull , "num_closed_pulls" , "num_closed_issues" )
461+ dbSession := db .GetEngine (ctx ).Decr (closedColName )
462+ if includeTotal {
463+ colName := util .Iif (isPull , "num_pulls" , "num_issues" )
464+ dbSession = dbSession .Decr (colName )
465+ }
466+ _ , err := dbSession .ID (repoID ).
467+ NoAutoCondition ().NoAutoTime ().
468+ Update (new (repo_model.Repository ))
469+ return err
470+ }
471+
457472// UpdateIssueMentions updates issue-user relations for mentioned users.
458473func UpdateIssueMentions (ctx context.Context , issueID int64 , mentions []* user_model.User ) error {
459474 if len (mentions ) == 0 {
0 commit comments