summaryrefslogtreecommitdiff
path: root/lib/gitlab/search
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-10-04 18:08:15 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-10-04 18:08:15 +0000
commit23dda8d4edb3c0efeb34586969ce0c64e385f936 (patch)
tree7573726226f43c71edff707dda377ca3088d3477 /lib/gitlab/search
parentbf6d126a58a66a11b2e4b9de89986174a1885105 (diff)
downloadgitlab-ce-23dda8d4edb3c0efeb34586969ce0c64e385f936.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/search')
-rw-r--r--lib/gitlab/search/query.rb23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/gitlab/search/query.rb b/lib/gitlab/search/query.rb
index 4c5fae87420..360bbc073c5 100644
--- a/lib/gitlab/search/query.rb
+++ b/lib/gitlab/search/query.rb
@@ -40,19 +40,24 @@ module Gitlab
query_tokens = parse_raw_query
filters = @filters.each_with_object([]) do |filter, parsed_filters|
- match = query_tokens.find { |part| part =~ /\A-?#{filter[:name]}:/ }
+ matches = query_tokens.select { |part| part =~ /\A-?#{filter[:name]}:/ }
- next unless match
+ next unless matches.any?
- input = match.split(':')[1..].join
- next if input.empty?
+ matches.each do |match|
+ query_filter = filter.dup
- filter[:negated] = match.start_with?("-")
- filter[:value] = parse_filter(filter, input.gsub(QUOTES_REGEXP, ''))
- filter[:regex_value] = Regexp.escape(filter[:value]).gsub('\*', '.*?')
- fragments << match
+ input = match.split(':')[1..].join
- parsed_filters << filter
+ next if input.empty?
+
+ query_filter[:negated] = match.start_with?("-")
+ query_filter[:value] = parse_filter(query_filter, input.gsub(QUOTES_REGEXP, ''))
+ query_filter[:regex_value] = Regexp.escape(query_filter[:value]).gsub('\*', '.*?')
+
+ fragments << match
+ parsed_filters << query_filter
+ end
end
query = (query_tokens - fragments).join(' ')