loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Don't let API add 2 exclusive labels from same scope (#27433)

Fixes #27380

authored by

JakobDev and committed by
GitHub
f2b2608a 9f8d5985

+40 -1
+11
models/issues/issue_label.go
··· 54 54 return err 55 55 } 56 56 57 + issue.Labels = append(issue.Labels, label) 58 + 57 59 return updateLabelCols(ctx, label, "num_issues", "num_closed_issue") 58 60 } 59 61 ··· 122 124 if err = issue.LoadRepo(ctx); err != nil { 123 125 return err 124 126 } 127 + 128 + if err = issue.LoadLabels(ctx); err != nil { 129 + return err 130 + } 131 + 125 132 for _, l := range labels { 126 133 // Don't add already present labels and invalid labels 127 134 if HasIssueLabel(ctx, issue.ID, l.ID) || 128 135 (l.RepoID != issue.RepoID && l.OrgID != issue.Repo.OwnerID) { 129 136 continue 137 + } 138 + 139 + if err = RemoveDuplicateExclusiveIssueLabels(ctx, issue, l, doer); err != nil { 140 + return err 130 141 } 131 142 132 143 if err = newIssueLabel(ctx, issue, l, doer); err != nil {
+28
models/issues/issue_label_test.go
··· 1 + // Copyright 2023 The Gitea Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package issues_test 5 + 6 + import ( 7 + "testing" 8 + 9 + issues_model "code.gitea.io/gitea/models/issues" 10 + "code.gitea.io/gitea/models/unittest" 11 + user_model "code.gitea.io/gitea/models/user" 12 + 13 + "github.com/stretchr/testify/assert" 14 + ) 15 + 16 + func TestNewIssueLabelsScope(t *testing.T) { 17 + assert.NoError(t, unittest.PrepareTestDatabase()) 18 + 19 + issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 18}) 20 + label1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: 7}) 21 + label2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: 8}) 22 + doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 23 + 24 + assert.NoError(t, issues_model.NewIssueLabels(issue, []*issues_model.Label{label1, label2}, doer)) 25 + 26 + assert.Len(t, issue.Labels, 1) 27 + assert.Equal(t, label2.ID, issue.Labels[0].ID) 28 + }
+1 -1
routers/api/v1/repo/issue_label.go
··· 317 317 return nil, nil, err 318 318 } 319 319 320 - labels, err := issues_model.GetLabelsByIDs(ctx, form.Labels, "id", "repo_id", "org_id") 320 + labels, err := issues_model.GetLabelsByIDs(ctx, form.Labels, "id", "repo_id", "org_id", "name", "exclusive") 321 321 if err != nil { 322 322 ctx.Error(http.StatusInternalServerError, "GetLabelsByIDs", err) 323 323 return nil, nil, err