Fix the topic validation rule and suport dots (#26286) (#26303)

Backport #26286 by @wxiaoguang

1. Allow leading and trailing spaces by user input, these spaces have
already been trimmed at backend
2. Allow using dots in the topic

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
(cherry picked from commit fcd055c34a)
This commit is contained in:
Giteabot 2023-08-04 13:00:49 +08:00 committed by Earl Warren
parent db326835e6
commit 9e4be39acb
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
4 changed files with 5 additions and 3 deletions

View file

@ -22,7 +22,7 @@ func init() {
db.RegisterModel(new(RepoTopic)) db.RegisterModel(new(RepoTopic))
} }
var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`) var topicPattern = regexp.MustCompile(`^[a-z0-9][-.a-z0-9]*$`)
// Topic represents a topic of repositories // Topic represents a topic of repositories
type Topic struct { type Topic struct {

View file

@ -69,6 +69,7 @@ func TestAddTopic(t *testing.T) {
func TestTopicValidator(t *testing.T) { func TestTopicValidator(t *testing.T) {
assert.True(t, repo_model.ValidateTopic("12345")) assert.True(t, repo_model.ValidateTopic("12345"))
assert.True(t, repo_model.ValidateTopic("2-test")) assert.True(t, repo_model.ValidateTopic("2-test"))
assert.True(t, repo_model.ValidateTopic("foo.bar"))
assert.True(t, repo_model.ValidateTopic("test-3")) assert.True(t, repo_model.ValidateTopic("test-3"))
assert.True(t, repo_model.ValidateTopic("first")) assert.True(t, repo_model.ValidateTopic("first"))
assert.True(t, repo_model.ValidateTopic("second-test-topic")) assert.True(t, repo_model.ValidateTopic("second-test-topic"))
@ -77,4 +78,5 @@ func TestTopicValidator(t *testing.T) {
assert.False(t, repo_model.ValidateTopic("$fourth-test,topic")) assert.False(t, repo_model.ValidateTopic("$fourth-test,topic"))
assert.False(t, repo_model.ValidateTopic("-fifth-test-topic")) assert.False(t, repo_model.ValidateTopic("-fifth-test-topic"))
assert.False(t, repo_model.ValidateTopic("sixth-go-project-topic-with-excess-length")) assert.False(t, repo_model.ValidateTopic("sixth-go-project-topic-with-excess-length"))
assert.False(t, repo_model.ValidateTopic(".foo"))
} }

View file

@ -2500,7 +2500,7 @@ tag.create_success = Tag "%s" has been created.
topic.manage_topics = Manage Topics topic.manage_topics = Manage Topics
topic.done = Done topic.done = Done
topic.count_prompt = You cannot select more than 25 topics topic.count_prompt = You cannot select more than 25 topics
topic.format_prompt = Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long. topic.format_prompt = Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
find_file.go_to_file = Go to file find_file.go_to_file = Go to file
find_file.no_matching = No matching file found find_file.no_matching = No matching file found

View file

@ -166,7 +166,7 @@ export function initRepoTopicBar() {
rules: [ rules: [
{ {
type: 'validateTopic', type: 'validateTopic',
value: /^[a-z0-9][a-z0-9-]{0,35}$/, value: /^\s*[a-z0-9][-.a-z0-9]{0,35}\s*$/,
prompt: topicPrompts.formatPrompt prompt: topicPrompts.formatPrompt
}, },
{ {