Browse Source

Properly calculate the number of open issues per label

Raphael Randschau 10 years ago
parent
commit
1f61340fa3
2 changed files with 41 additions and 0 deletions
  1. 22 0
      models/action.go
  2. 19 0
      routers/repo/issue.go

+ 22 - 0
models/action.go

@@ -182,6 +182,17 @@ func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, com
 				}
 				issue.IsClosed = true
 
+				if err = issue.GetLabels(); err != nil {
+					return err
+				}
+				for _, label := range issue.Labels {
+					label.NumClosedIssues++
+
+					if err = UpdateLabel(label); err != nil {
+						return err
+					}
+				}
+
 				if err = UpdateIssue(issue); err != nil {
 					return err
 				} else if err = UpdateIssueUserPairsByStatus(issue.Id, issue.IsClosed); err != nil {
@@ -230,6 +241,17 @@ func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, com
 				}
 				issue.IsClosed = false
 
+				if err = issue.GetLabels(); err != nil {
+					return err
+				}
+				for _, label := range issue.Labels {
+					label.NumClosedIssues--
+
+					if err = UpdateLabel(label); err != nil {
+						return err
+					}
+				}
+
 				if err = UpdateIssue(issue); err != nil {
 					return err
 				} else if err = UpdateIssueUserPairsByStatus(issue.Id, issue.IsClosed); err != nil {

+ 19 - 0
routers/repo/issue.go

@@ -549,6 +549,7 @@ func UpdateIssueLabel(ctx *middleware.Context) {
 				label.NumClosedIssues--
 			}
 		}
+
 		if err = models.UpdateLabel(label); err != nil {
 			ctx.Handle(500, "issue.UpdateIssueLabel(UpdateLabel)", err)
 			return
@@ -767,6 +768,24 @@ func Comment(ctx *middleware.Context) {
 				return
 			}
 
+			if err = issue.GetLabels(); err != nil {
+				send(500, nil, err)
+				return
+			}
+
+			for _, label := range issue.Labels {
+				if issue.IsClosed {
+					label.NumClosedIssues++
+				} else {
+					label.NumClosedIssues--
+				}
+
+				if err = models.UpdateLabel(label); err != nil {
+					send(500, nil, err)
+					return
+				}
+			}
+
 			// Change open/closed issue counter for the associated milestone
 			if issue.MilestoneId > 0 {
 				if err = models.ChangeMilestoneIssueStats(issue); err != nil {