]> source.dussan.org Git - gitea.git/commitdiff
Fix the topic validation rule and suport dots (#26286)
authorwxiaoguang <wxiaoguang@gmail.com>
Thu, 3 Aug 2023 09:18:06 +0000 (17:18 +0800)
committerGitHub <noreply@github.com>
Thu, 3 Aug 2023 09:18:06 +0000 (09:18 +0000)
1. Allow leading and trailing spaces by user input, these spaces have
already been trimmed at backend
2. Allow using dots in the topic

models/repo/topic.go
models/repo/topic_test.go
options/locale/locale_en-US.ini
web_src/js/features/repo-home.js

index ec3de869d5be4b5a56ed877ad274af16e47e4ed8..71302388b940adef8fad5709a3fbc887c29e21a4 100644 (file)
@@ -22,7 +22,7 @@ func init() {
        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
 type Topic struct {
index 8a8728168d457e78cee8612cf48371bd723f165a..aaed91bdd3aec40ede2c854ad387f823dd868288 100644 (file)
@@ -69,6 +69,7 @@ func TestAddTopic(t *testing.T) {
 func TestTopicValidator(t *testing.T) {
        assert.True(t, repo_model.ValidateTopic("12345"))
        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("first"))
        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("-fifth-test-topic"))
        assert.False(t, repo_model.ValidateTopic("sixth-go-project-topic-with-excess-length"))
+       assert.False(t, repo_model.ValidateTopic(".foo"))
 }
index 6cb830b6d02c76d647057366dfb10d86c6348186..c6379d0fe6479ddb23f267747c6ab8bd8419822e 100644 (file)
@@ -2507,7 +2507,7 @@ tag.create_success = Tag "%s" has been created.
 topic.manage_topics = Manage Topics
 topic.done = Done
 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.no_matching = No matching file found
index 55a27710542c0a36719a32610d891a4ed25301a0..70c225b4ba18f4a7c3e32dcd60976af847e5c68b 100644 (file)
@@ -166,7 +166,7 @@ export function initRepoTopicBar() {
         rules: [
           {
             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
           },
           {