Skip to content

Commit 6b6f20b

Browse files
authored
BugFix: updateLabel can updated not allowed fields #11242 (#11242)
1 parent 4563eb8 commit 6b6f20b

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

models/issue.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed, isMergeP
609609
return nil, err
610610
}
611611
for idx := range issue.Labels {
612-
if err = updateLabel(e, issue.Labels[idx]); err != nil {
612+
if err = updateLabelCols(e, issue.Labels[idx], "num_issues", "num_closed_issue"); err != nil {
613613
return nil, err
614614
}
615615
}

models/issue_label.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ func UpdateLabel(l *Label) error {
246246
if !LabelColorPattern.MatchString(l.Color) {
247247
return fmt.Errorf("bad color code: %s", l.Color)
248248
}
249-
return updateLabel(x, l)
249+
return updateLabelCols(x, l, "name", "description", "color")
250250
}
251251

252252
// DeleteLabel delete a label
@@ -587,7 +587,7 @@ func GetLabelsByIssueID(issueID int64) ([]*Label, error) {
587587
return getLabelsByIssueID(x, issueID)
588588
}
589589

590-
func updateLabel(e Engine, l *Label) error {
590+
func updateLabelCols(e Engine, l *Label, cols ...string) error {
591591
_, err := e.ID(l.ID).
592592
SetExpr("num_issues",
593593
builder.Select("count(*)").From("issue_label").
@@ -601,7 +601,7 @@ func updateLabel(e Engine, l *Label) error {
601601
"issue.is_closed": true,
602602
}),
603603
).
604-
AllCols().Update(l)
604+
Cols(cols...).Update(l)
605605
return err
606606
}
607607

@@ -653,7 +653,7 @@ func newIssueLabel(e *xorm.Session, issue *Issue, label *Label, doer *User) (err
653653
return err
654654
}
655655

656-
return updateLabel(e, label)
656+
return updateLabelCols(e, label, "num_issues", "num_closed_issue")
657657
}
658658

659659
// NewIssueLabel creates a new issue-label relation.
@@ -729,7 +729,7 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label, doer *User) (
729729
return err
730730
}
731731

732-
return updateLabel(e, label)
732+
return updateLabelCols(e, label, "num_issues", "num_closed_issue")
733733
}
734734

735735
// DeleteIssueLabel deletes issue-label relation.

models/issue_label_test.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,16 @@ func TestGetLabelsByIssueID(t *testing.T) {
252252
func TestUpdateLabel(t *testing.T) {
253253
assert.NoError(t, PrepareTestDatabase())
254254
label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label)
255-
label.Color = "#ffff00"
256-
label.Name = "newLabelName"
257-
assert.NoError(t, UpdateLabel(label))
255+
// make sure update wont overwrite it
256+
update := &Label{
257+
ID: label.ID,
258+
Color: "#ffff00",
259+
Name: "newLabelName",
260+
Description: label.Description,
261+
}
262+
label.Color = update.Color
263+
label.Name = update.Name
264+
assert.NoError(t, UpdateLabel(update))
258265
newLabel := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label)
259266
assert.Equal(t, *label, *newLabel)
260267
CheckConsistencyFor(t, &Label{}, &Repository{})

0 commit comments

Comments
 (0)