Fixes #27380tags/v1.22.0-rc0
@@ -54,6 +54,8 @@ func newIssueLabel(ctx context.Context, issue *Issue, label *Label, doer *user_m | |||
return err | |||
} | |||
issue.Labels = append(issue.Labels, label) | |||
return updateLabelCols(ctx, label, "num_issues", "num_closed_issue") | |||
} | |||
@@ -122,6 +124,11 @@ func newIssueLabels(ctx context.Context, issue *Issue, labels []*Label, doer *us | |||
if err = issue.LoadRepo(ctx); err != nil { | |||
return err | |||
} | |||
if err = issue.LoadLabels(ctx); err != nil { | |||
return err | |||
} | |||
for _, l := range labels { | |||
// Don't add already present labels and invalid labels | |||
if HasIssueLabel(ctx, issue.ID, l.ID) || | |||
@@ -129,6 +136,10 @@ func newIssueLabels(ctx context.Context, issue *Issue, labels []*Label, doer *us | |||
continue | |||
} | |||
if err = RemoveDuplicateExclusiveIssueLabels(ctx, issue, l, doer); err != nil { | |||
return err | |||
} | |||
if err = newIssueLabel(ctx, issue, l, doer); err != nil { | |||
return fmt.Errorf("newIssueLabel: %w", err) | |||
} |
@@ -0,0 +1,28 @@ | |||
// Copyright 2023 The Gitea Authors. All rights reserved. | |||
// SPDX-License-Identifier: MIT | |||
package issues_test | |||
import ( | |||
"testing" | |||
issues_model "code.gitea.io/gitea/models/issues" | |||
"code.gitea.io/gitea/models/unittest" | |||
user_model "code.gitea.io/gitea/models/user" | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func TestNewIssueLabelsScope(t *testing.T) { | |||
assert.NoError(t, unittest.PrepareTestDatabase()) | |||
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 18}) | |||
label1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: 7}) | |||
label2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: 8}) | |||
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) | |||
assert.NoError(t, issues_model.NewIssueLabels(issue, []*issues_model.Label{label1, label2}, doer)) | |||
assert.Len(t, issue.Labels, 1) | |||
assert.Equal(t, label2.ID, issue.Labels[0].ID) | |||
} |
@@ -317,7 +317,7 @@ func prepareForReplaceOrAdd(ctx *context.APIContext, form api.IssueLabelsOption) | |||
return nil, nil, err | |||
} | |||
labels, err := issues_model.GetLabelsByIDs(ctx, form.Labels, "id", "repo_id", "org_id") | |||
labels, err := issues_model.GetLabelsByIDs(ctx, form.Labels, "id", "repo_id", "org_id", "name", "exclusive") | |||
if err != nil { | |||
ctx.Error(http.StatusInternalServerError, "GetLabelsByIDs", err) | |||
return nil, nil, err |