File tree 3 files changed +22
-16
lines changed
3 files changed +22
-16
lines changed Original file line number Diff line number Diff line change @@ -60,25 +60,31 @@ func ValidateTopic(topic string) bool {
60
60
}
61
61
62
62
// SanitizeAndValidateTopics sanitizes and checks an array or topics
63
- func SanitizeAndValidateTopics (topics []string ) (invalidTopics []string ) {
63
+ func SanitizeAndValidateTopics (topics []string ) (validTopics []string , invalidTopics []string ) {
64
+ validTopics = make ([]string , 0 )
64
65
invalidTopics = make ([]string , 0 )
65
66
66
- i := 0
67
+ LOOP_TOPICS:
67
68
for _ , topic := range topics {
68
69
topic = strings .TrimSpace (strings .ToLower (topic ))
69
70
// ignore empty string
70
71
if len (topic ) == 0 {
71
- continue
72
+ continue LOOP_TOPICS
73
+ }
74
+ // ignore same topic twice
75
+ for _ , vTopic := range validTopics {
76
+ if topic == vTopic {
77
+ continue LOOP_TOPICS
78
+ }
72
79
}
73
- topics [ i ] = topic
74
- i ++
75
- if ! ValidateTopic ( topic ) {
80
+ if ValidateTopic ( topic ) {
81
+ validTopics = append ( validTopics , topic )
82
+ } else {
76
83
invalidTopics = append (invalidTopics , topic )
77
84
}
78
85
}
79
- topics = topics [:i ]
80
86
81
- return invalidTopics
87
+ return validTopics , invalidTopics
82
88
}
83
89
84
90
// GetTopicByName retrieves topic by name
Original file line number Diff line number Diff line change @@ -84,11 +84,11 @@ func UpdateTopics(ctx *context.APIContext, form api.RepoTopicOptions) {
84
84
// "$ref": "#/responses/empty"
85
85
86
86
topicNames := form .Topics
87
- invalidTopics := models .SanitizeAndValidateTopics (topicNames )
87
+ validTopics , invalidTopics := models .SanitizeAndValidateTopics (topicNames )
88
88
89
- if len (topicNames ) > 25 {
89
+ if len (validTopics ) > 25 {
90
90
ctx .JSON (422 , map [string ]interface {}{
91
- "invalidTopics" : topicNames [: 0 ] ,
91
+ "invalidTopics" : nil ,
92
92
"message" : "Exceeding maximum number of topics per repo" ,
93
93
})
94
94
return
@@ -102,7 +102,7 @@ func UpdateTopics(ctx *context.APIContext, form api.RepoTopicOptions) {
102
102
return
103
103
}
104
104
105
- err := models .SaveTopics (ctx .Repo .Repository .ID , topicNames ... )
105
+ err := models .SaveTopics (ctx .Repo .Repository .ID , validTopics ... )
106
106
if err != nil {
107
107
log .Error ("SaveTopics failed: %v" , err )
108
108
ctx .JSON (500 , map [string ]interface {}{
Original file line number Diff line number Diff line change @@ -27,11 +27,11 @@ func TopicsPost(ctx *context.Context) {
27
27
topics = strings .Split (topicsStr , "," )
28
28
}
29
29
30
- invalidTopics := models .SanitizeAndValidateTopics (topics )
30
+ validTopics , invalidTopics := models .SanitizeAndValidateTopics (topics )
31
31
32
- if len (topics ) > 25 {
32
+ if len (validTopics ) > 25 {
33
33
ctx .JSON (422 , map [string ]interface {}{
34
- "invalidTopics" : topics [: 0 ] ,
34
+ "invalidTopics" : nil ,
35
35
"message" : ctx .Tr ("repo.topic.count_prompt" ),
36
36
})
37
37
return
@@ -45,7 +45,7 @@ func TopicsPost(ctx *context.Context) {
45
45
return
46
46
}
47
47
48
- err := models .SaveTopics (ctx .Repo .Repository .ID , topics ... )
48
+ err := models .SaveTopics (ctx .Repo .Repository .ID , validTopics ... )
49
49
if err != nil {
50
50
log .Error ("SaveTopics failed: %v" , err )
51
51
ctx .JSON (500 , map [string ]interface {}{
You can’t perform that action at this time.
0 commit comments