Skip to content

Commit df71d03

Browse files
committed
Be more lenient with label colors
1 parent 3a91f84 commit df71d03

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

models/issue_label.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
)
2323

2424
// LabelColorPattern is a regexp witch can validate LabelColor
25-
var LabelColorPattern = regexp.MustCompile("^#[0-9a-fA-F]{6}$")
25+
var LabelColorPattern = regexp.MustCompile("^#?(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{3})$")
2626

2727
// Label represents a label of repository for issues.
2828
type Label struct {
@@ -258,6 +258,23 @@ func NewLabel(label *Label) error {
258258
if !LabelColorPattern.MatchString(label.Color) {
259259
return fmt.Errorf("bad color code: %s", label.Color)
260260
}
261+
262+
// normalize case
263+
label.Color = strings.ToLower(label.Color)
264+
265+
// add leading hash
266+
if label.Color[0] != '#' {
267+
label.Color = "#" + label.Color
268+
}
269+
270+
// convert 3-character shorthand into 6-character version
271+
if len(label.Color) == 4 {
272+
r := label.Color[1]
273+
g := label.Color[2]
274+
b := label.Color[3]
275+
label.Color = fmt.Sprintf("#%c%c%c%c%c%c", r, r, g, g, b, b)
276+
}
277+
261278
return newLabel(db.GetEngine(db.DefaultContext), label)
262279
}
263280

models/issue_label_test.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,15 @@ func TestNewLabels(t *testing.T) {
3838
assert.NoError(t, unittest.PrepareTestDatabase())
3939
labels := []*Label{
4040
{RepoID: 2, Name: "labelName2", Color: "#123456"},
41-
{RepoID: 3, Name: "labelName3", Color: "#23456F"},
41+
{RepoID: 3, Name: "labelName3", Color: "#123"},
42+
{RepoID: 4, Name: "labelName4", Color: "ABCDEF"},
43+
{RepoID: 5, Name: "labelName5", Color: "DEF"},
4244
}
4345
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: ""}))
44-
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "123456"}))
46+
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#45G"}))
4547
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#12345G"}))
48+
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "45G"}))
49+
assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "12345G"}))
4650
for _, label := range labels {
4751
unittest.AssertNotExistsBean(t, label)
4852
}

services/forms/repo_form.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ type CreateLabelForm struct {
549549
ID int64
550550
Title string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_title"`
551551
Description string `binding:"MaxSize(200)" locale:"repo.issues.label_description"`
552-
Color string `binding:"Required;Size(7)" locale:"repo.issues.label_color"`
552+
Color string `binding:"Required;MaxSize(7)" locale:"repo.issues.label_color"`
553553
}
554554

555555
// Validate validates the fields

0 commit comments

Comments
 (0)