]> source.dussan.org Git - gitea.git/commitdiff
Hide label comments if labels were added and removed immediately (#17455)
authorqwerty287 <80460567+qwerty287@users.noreply.github.com>
Thu, 4 Nov 2021 14:51:30 +0000 (15:51 +0100)
committerGitHub <noreply@github.com>
Thu, 4 Nov 2021 14:51:30 +0000 (22:51 +0800)
* Hide label comments if labels were added and removed immediately

* Add comment and rename var

* Fix unit test

* Add test case

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
routers/web/repo/issue.go
routers/web/repo/issue_test.go

index 173cb49e45127217322ee3b71df45fdee4d1192d..0816d413400c5ee1ea5c47e6b25a023aea85c12b 100644 (file)
@@ -2577,9 +2577,33 @@ func combineLabelComments(issue *models.Issue) {
                if cur.Label != nil { // now cur MUST be label comment
                        if prev.Type == models.CommentTypeLabel { // we can combine them only prev is a label comment
                                if cur.Content != "1" {
-                                       prev.RemovedLabels = append(prev.RemovedLabels, cur.Label)
+                                       // remove labels from the AddedLabels list if the label that was removed is already
+                                       // in this list, and if it's not in this list, add the label to RemovedLabels
+                                       addedAndRemoved := false
+                                       for i, label := range prev.AddedLabels {
+                                               if cur.Label.ID == label.ID {
+                                                       prev.AddedLabels = append(prev.AddedLabels[:i], prev.AddedLabels[i+1:]...)
+                                                       addedAndRemoved = true
+                                                       break
+                                               }
+                                       }
+                                       if !addedAndRemoved {
+                                               prev.RemovedLabels = append(prev.RemovedLabels, cur.Label)
+                                       }
                                } else {
-                                       prev.AddedLabels = append(prev.AddedLabels, cur.Label)
+                                       // remove labels from the RemovedLabels list if the label that was added is already
+                                       // in this list, and if it's not in this list, add the label to AddedLabels
+                                       removedAndAdded := false
+                                       for i, label := range prev.RemovedLabels {
+                                               if cur.Label.ID == label.ID {
+                                                       prev.RemovedLabels = append(prev.RemovedLabels[:i], prev.RemovedLabels[i+1:]...)
+                                                       removedAndAdded = true
+                                                       break
+                                               }
+                                       }
+                                       if !removedAndAdded {
+                                               prev.AddedLabels = append(prev.AddedLabels, cur.Label)
+                                       }
                                }
                                prev.CreatedUnix = cur.CreatedUnix
                                // remove the current comment since it has been combined to prev comment
index 7fb837fa124e235f058e24d166fec174075b7ef0..6638baf34a16df5ca2f88b75d8cf1114c4012f87 100644 (file)
@@ -51,16 +51,7 @@ func TestCombineLabelComments(t *testing.T) {
                                        PosterID:    1,
                                        Content:     "1",
                                        CreatedUnix: 0,
-                                       AddedLabels: []*models.Label{
-                                               {
-                                                       Name: "kind/bug",
-                                               },
-                                       },
-                                       RemovedLabels: []*models.Label{
-                                               {
-                                                       Name: "kind/bug",
-                                               },
-                                       },
+                                       AddedLabels: []*models.Label{},
                                        Label: &models.Label{
                                                Name: "kind/bug",
                                        },
@@ -310,6 +301,66 @@ func TestCombineLabelComments(t *testing.T) {
                                },
                        },
                },
+               {
+                       name: "kase 6",
+                       beforeCombined: []*models.Comment{
+                               {
+                                       Type:     models.CommentTypeLabel,
+                                       PosterID: 1,
+                                       Content:  "1",
+                                       Label: &models.Label{
+                                               Name: "kind/bug",
+                                       },
+                                       CreatedUnix: 0,
+                               },
+                               {
+                                       Type:     models.CommentTypeLabel,
+                                       PosterID: 1,
+                                       Content:  "1",
+                                       Label: &models.Label{
+                                               Name: "reviewed/confirmed",
+                                       },
+                                       CreatedUnix: 0,
+                               },
+                               {
+                                       Type:     models.CommentTypeLabel,
+                                       PosterID: 1,
+                                       Content:  "",
+                                       Label: &models.Label{
+                                               Name: "kind/bug",
+                                       },
+                                       CreatedUnix: 0,
+                               },
+                               {
+                                       Type:     models.CommentTypeLabel,
+                                       PosterID: 1,
+                                       Content:  "1",
+                                       Label: &models.Label{
+                                               Name: "kind/feature",
+                                       },
+                                       CreatedUnix: 0,
+                               },
+                       },
+                       afterCombined: []*models.Comment{
+                               {
+                                       Type:     models.CommentTypeLabel,
+                                       PosterID: 1,
+                                       Content:  "1",
+                                       Label: &models.Label{
+                                               Name: "kind/bug",
+                                       },
+                                       AddedLabels: []*models.Label{
+                                               {
+                                                       Name: "reviewed/confirmed",
+                                               },
+                                               {
+                                                       Name: "kind/feature",
+                                               },
+                                       },
+                                       CreatedUnix: 0,
+                               },
+                       },
+               },
        }
 
        for _, kase := range kases {