Browse Source

BugFix: updateLabel can updated not allowed fields #11242 (#11242)

tags/v1.13.0-dev
6543 4 years ago
parent
commit
6b6f20b6d4
No account linked to committer's email address
3 changed files with 16 additions and 9 deletions
  1. 1
    1
      models/issue.go
  2. 5
    5
      models/issue_label.go
  3. 10
    3
      models/issue_label_test.go

+ 1
- 1
models/issue.go View File

return nil, err return nil, err
} }
for idx := range issue.Labels { for idx := range issue.Labels {
if err = updateLabel(e, issue.Labels[idx]); err != nil {
if err = updateLabelCols(e, issue.Labels[idx], "num_issues", "num_closed_issue"); err != nil {
return nil, err return nil, err
} }
} }

+ 5
- 5
models/issue_label.go View File

if !LabelColorPattern.MatchString(l.Color) { if !LabelColorPattern.MatchString(l.Color) {
return fmt.Errorf("bad color code: %s", l.Color) return fmt.Errorf("bad color code: %s", l.Color)
} }
return updateLabel(x, l)
return updateLabelCols(x, l, "name", "description", "color")
} }


// DeleteLabel delete a label // DeleteLabel delete a label
return getLabelsByIssueID(x, issueID) return getLabelsByIssueID(x, issueID)
} }


func updateLabel(e Engine, l *Label) error {
func updateLabelCols(e Engine, l *Label, cols ...string) error {
_, err := e.ID(l.ID). _, err := e.ID(l.ID).
SetExpr("num_issues", SetExpr("num_issues",
builder.Select("count(*)").From("issue_label"). builder.Select("count(*)").From("issue_label").
"issue.is_closed": true, "issue.is_closed": true,
}), }),
). ).
AllCols().Update(l)
Cols(cols...).Update(l)
return err return err
} }


return err return err
} }


return updateLabel(e, label)
return updateLabelCols(e, label, "num_issues", "num_closed_issue")
} }


// NewIssueLabel creates a new issue-label relation. // NewIssueLabel creates a new issue-label relation.
return err return err
} }


return updateLabel(e, label)
return updateLabelCols(e, label, "num_issues", "num_closed_issue")
} }


// DeleteIssueLabel deletes issue-label relation. // DeleteIssueLabel deletes issue-label relation.

+ 10
- 3
models/issue_label_test.go View File

func TestUpdateLabel(t *testing.T) { func TestUpdateLabel(t *testing.T) {
assert.NoError(t, PrepareTestDatabase()) assert.NoError(t, PrepareTestDatabase())
label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label)
label.Color = "#ffff00"
label.Name = "newLabelName"
assert.NoError(t, UpdateLabel(label))
// make sure update wont overwrite it
update := &Label{
ID: label.ID,
Color: "#ffff00",
Name: "newLabelName",
Description: label.Description,
}
label.Color = update.Color
label.Name = update.Name
assert.NoError(t, UpdateLabel(update))
newLabel := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) newLabel := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label)
assert.Equal(t, *label, *newLabel) assert.Equal(t, *label, *newLabel)
CheckConsistencyFor(t, &Label{}, &Repository{}) CheckConsistencyFor(t, &Label{}, &Repository{})

Loading…
Cancel
Save