Be more lenient with label colors (#17752)
Accept 12-bit color specifications.
This commit is contained in:
		
							parent
							
								
									3a91f845e8
								
							
						
					
					
						commit
						9911b66aea
					
				| @ -22,7 +22,7 @@ import ( | ||||
| ) | ||||
| 
 | ||||
| // LabelColorPattern is a regexp witch can validate LabelColor
 | ||||
| var LabelColorPattern = regexp.MustCompile("^#[0-9a-fA-F]{6}$") | ||||
| var LabelColorPattern = regexp.MustCompile("^#?(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{3})$") | ||||
| 
 | ||||
| // Label represents a label of repository for issues.
 | ||||
| type Label struct { | ||||
| @ -258,6 +258,23 @@ func NewLabel(label *Label) error { | ||||
| 	if !LabelColorPattern.MatchString(label.Color) { | ||||
| 		return fmt.Errorf("bad color code: %s", label.Color) | ||||
| 	} | ||||
| 
 | ||||
| 	// normalize case
 | ||||
| 	label.Color = strings.ToLower(label.Color) | ||||
| 
 | ||||
| 	// add leading hash
 | ||||
| 	if label.Color[0] != '#' { | ||||
| 		label.Color = "#" + label.Color | ||||
| 	} | ||||
| 
 | ||||
| 	// convert 3-character shorthand into 6-character version
 | ||||
| 	if len(label.Color) == 4 { | ||||
| 		r := label.Color[1] | ||||
| 		g := label.Color[2] | ||||
| 		b := label.Color[3] | ||||
| 		label.Color = fmt.Sprintf("#%c%c%c%c%c%c", r, r, g, g, b, b) | ||||
| 	} | ||||
| 
 | ||||
| 	return newLabel(db.GetEngine(db.DefaultContext), label) | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -38,11 +38,15 @@ func TestNewLabels(t *testing.T) { | ||||
| 	assert.NoError(t, unittest.PrepareTestDatabase()) | ||||
| 	labels := []*Label{ | ||||
| 		{RepoID: 2, Name: "labelName2", Color: "#123456"}, | ||||
| 		{RepoID: 3, Name: "labelName3", Color: "#23456F"}, | ||||
| 		{RepoID: 3, Name: "labelName3", Color: "#123"}, | ||||
| 		{RepoID: 4, Name: "labelName4", Color: "ABCDEF"}, | ||||
| 		{RepoID: 5, Name: "labelName5", Color: "DEF"}, | ||||
| 	} | ||||
| 	assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: ""})) | ||||
| 	assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "123456"})) | ||||
| 	assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#45G"})) | ||||
| 	assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "#12345G"})) | ||||
| 	assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "45G"})) | ||||
| 	assert.Error(t, NewLabel(&Label{RepoID: 3, Name: "invalid Color", Color: "12345G"})) | ||||
| 	for _, label := range labels { | ||||
| 		unittest.AssertNotExistsBean(t, label) | ||||
| 	} | ||||
|  | ||||
| @ -549,7 +549,7 @@ type CreateLabelForm struct { | ||||
| 	ID          int64 | ||||
| 	Title       string `binding:"Required;MaxSize(50)" locale:"repo.issues.label_title"` | ||||
| 	Description string `binding:"MaxSize(200)" locale:"repo.issues.label_description"` | ||||
| 	Color       string `binding:"Required;Size(7)" locale:"repo.issues.label_color"` | ||||
| 	Color       string `binding:"Required;MaxSize(7)" locale:"repo.issues.label_color"` | ||||
| } | ||||
| 
 | ||||
| // Validate validates the fields
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user