@@ -148,11 +148,13 @@ func updateIssueNumbers(ctx context.Context, issue *Issue, doer *user_model.User
148148 // update repository's issue closed number
149149 switch cmtType {
150150 case CommentTypeClose , CommentTypeMergePull :
151- if err := DecrRepoIssueNumbers (ctx , issue .RepoID , issue .IsPull , false ); err != nil {
151+ // only increase closed count
152+ if err := IncrRepoIssueNumbers (ctx , issue .RepoID , issue .IsPull , false ); err != nil {
152153 return nil , err
153154 }
154155 case CommentTypeReopen :
155- if err := IncrRepoIssueNumbers (ctx , issue .RepoID , issue .IsPull ); err != nil {
156+ // only decrease closed count
157+ if err := DecrRepoIssueNumbers (ctx , issue .RepoID , issue .IsPull , false , true ); err != nil {
156158 return nil , err
157159 }
158160 default :
@@ -377,8 +379,8 @@ func NewIssueWithIndex(ctx context.Context, doer *user_model.User, opts NewIssue
377379 }
378380 }
379381
380- // Update repository issue count
381- if err := IncrRepoIssueNumbers (ctx , opts .Repo .ID , opts .Issue .IsPull ); err != nil {
382+ // Update repository issue total count
383+ if err := IncrRepoIssueNumbers (ctx , opts .Repo .ID , opts .Issue .IsPull , true ); err != nil {
382384 return err
383385 }
384386
@@ -448,21 +450,36 @@ func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, la
448450 })
449451}
450452
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 ).
453+ // IncrRepoIssueNumbers increments repository issue numbers.
454+ func IncrRepoIssueNumbers (ctx context.Context , repoID int64 , isPull bool , totalOrClosed bool ) error {
455+ dbSession := db .GetEngine (ctx )
456+ var colName string
457+ if totalOrClosed {
458+ colName = util .Iif (isPull , "num_pulls" , "num_issues" )
459+ } else {
460+ colName = util .Iif (isPull , "num_closed_pulls" , "num_closed_issues" )
461+ }
462+ _ , err := dbSession .Incr (colName ).ID (repoID ).
454463 NoAutoCondition ().NoAutoTime ().
455464 Update (new (repo_model.Repository ))
456465 return err
457466}
458467
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 )
468+ // DecrRepoIssueNumbers decrements repository issue numbers.
469+ func DecrRepoIssueNumbers (ctx context.Context , repoID int64 , isPull , includeTotal , includeClosed bool ) error {
470+ if ! includeTotal && ! includeClosed {
471+ return fmt .Errorf ("no numbers to decrease for repo id %d" , repoID )
472+ }
473+
474+ dbSession := db .GetEngine (ctx )
462475 if includeTotal {
463476 colName := util .Iif (isPull , "num_pulls" , "num_issues" )
464477 dbSession = dbSession .Decr (colName )
465478 }
479+ if includeClosed {
480+ closedColName := util .Iif (isPull , "num_closed_pulls" , "num_closed_issues" )
481+ dbSession = dbSession .Decr (closedColName )
482+ }
466483 _ , err := dbSession .ID (repoID ).
467484 NoAutoCondition ().NoAutoTime ().
468485 Update (new (repo_model.Repository ))
0 commit comments