|
|
|
@@ -166,6 +166,8 @@ type SearchRepoOptions struct { |
|
|
|
Archived util.OptionalBool |
|
|
|
// only search topic name |
|
|
|
TopicOnly bool |
|
|
|
//search by Specific TopicName |
|
|
|
TopicName string |
|
|
|
// include description in keyword search |
|
|
|
IncludeDescription bool |
|
|
|
// None -> include has milestones AND has no milestone |
|
|
|
@@ -327,6 +329,18 @@ func SearchRepositoryCondition(opts *SearchRepoOptions) builder.Cond { |
|
|
|
} |
|
|
|
cond = cond.And(keywordCond) |
|
|
|
} |
|
|
|
if opts.TopicName != "" { |
|
|
|
var subQueryCond = builder.NewCond() |
|
|
|
subQueryCond = subQueryCond.Or(builder.Eq{"topic.name": opts.TopicName}) |
|
|
|
subQuery := builder.Select("repo_topic.repo_id").From("repo_topic"). |
|
|
|
Join("INNER", "topic", "topic.id = repo_topic.topic_id"). |
|
|
|
Where(subQueryCond). |
|
|
|
GroupBy("repo_topic.repo_id") |
|
|
|
|
|
|
|
var topicNameCond = builder.In("id", subQuery) |
|
|
|
cond = cond.And(topicNameCond) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if opts.Fork != util.OptionalBoolNone { |
|
|
|
cond = cond.And(builder.Eq{"is_fork": opts.Fork == util.OptionalBoolTrue}) |
|
|
|
|