f23b1cb453
Replace MR access checks with use of MergeRequestsFinder Split from !2024 to partially solve https://gitlab.com/gitlab-org/gitlab-ce/issues/23867 ⚠️ - Potentially untested 💣 - No test coverage 🚥 - Test coverage of some sort exists (a test failed when error raised) 🚦 - Test coverage of return value (a test failed when nil used) ✅ - Permissions check tested - [x] 💣 app/finders/notes_finder.rb:17 - [x] ⚠️ app/views/layouts/nav/_project.html.haml:80 [`.count`] - [x] 💣 app/controllers/concerns/creates_commit.rb:84 - [x] 🚥 app/controllers/projects/commits_controller.rb:24 - [x] 🚥 app/controllers/projects/compare_controller.rb:56 - [x] 🚦 app/controllers/projects/discussions_controller.rb:29 - [x] ✅ app/controllers/projects/todos_controller.rb:27 - [x] 🚦 app/models/commit.rb:268 - [x] ✅ lib/gitlab/search_results.rb:71 - [x] https://dev.gitlab.org/gitlab/gitlabhq/merge_requests/2024/diffs#d1c10892daedb4d4dd3d4b12b6d071091eea83df_267_266 Memoize ` merged_merge_request(current_user)` - [x] https://dev.gitlab.org/gitlab/gitlabhq/merge_requests/2024/diffs#d1c10892daedb4d4dd3d4b12b6d071091eea83df_248_247 Expected side effect for `merged_merge_request!`, consider `skip_authorization: true`. - [x] https://dev.gitlab.org/gitlab/gitlabhq/merge_requests/2024/diffs#d1c10892daedb4d4dd3d4b12b6d071091eea83df_269_269 Scary use of unchecked `merged_merge_request?` See merge request !2033
92 lines
2.2 KiB
Ruby
92 lines
2.2 KiB
Ruby
module Gitlab
|
|
class SearchResults
|
|
attr_reader :current_user, :query
|
|
|
|
# Limit search results by passed projects
|
|
# It allows us to search only for projects user has access to
|
|
attr_reader :limit_projects
|
|
|
|
def initialize(current_user, limit_projects, query)
|
|
@current_user = current_user
|
|
@limit_projects = limit_projects || Project.all
|
|
@query = Shellwords.shellescape(query) if query.present?
|
|
end
|
|
|
|
def objects(scope, page = nil)
|
|
case scope
|
|
when 'projects'
|
|
projects.page(page).per(per_page)
|
|
when 'issues'
|
|
issues.page(page).per(per_page)
|
|
when 'merge_requests'
|
|
merge_requests.page(page).per(per_page)
|
|
when 'milestones'
|
|
milestones.page(page).per(per_page)
|
|
else
|
|
Kaminari.paginate_array([]).page(page).per(per_page)
|
|
end
|
|
end
|
|
|
|
def projects_count
|
|
@projects_count ||= projects.count
|
|
end
|
|
|
|
def issues_count
|
|
@issues_count ||= issues.count
|
|
end
|
|
|
|
def merge_requests_count
|
|
@merge_requests_count ||= merge_requests.count
|
|
end
|
|
|
|
def milestones_count
|
|
@milestones_count ||= milestones.count
|
|
end
|
|
|
|
private
|
|
|
|
def projects
|
|
limit_projects.search(query)
|
|
end
|
|
|
|
def issues
|
|
issues = IssuesFinder.new(current_user).execute.where(project_id: project_ids_relation)
|
|
|
|
if query =~ /#(\d+)\z/
|
|
issues = issues.where(iid: $1)
|
|
else
|
|
issues = issues.full_search(query)
|
|
end
|
|
|
|
issues.order('updated_at DESC')
|
|
end
|
|
|
|
def milestones
|
|
milestones = Milestone.where(project_id: project_ids_relation)
|
|
milestones = milestones.search(query)
|
|
milestones.order('updated_at DESC')
|
|
end
|
|
|
|
def merge_requests
|
|
merge_requests = MergeRequestsFinder.new(current_user).execute.in_projects(project_ids_relation)
|
|
if query =~ /[#!](\d+)\z/
|
|
merge_requests = merge_requests.where(iid: $1)
|
|
else
|
|
merge_requests = merge_requests.full_search(query)
|
|
end
|
|
merge_requests.order('updated_at DESC')
|
|
end
|
|
|
|
def default_scope
|
|
'projects'
|
|
end
|
|
|
|
def per_page
|
|
20
|
|
end
|
|
|
|
def project_ids_relation
|
|
limit_projects.select(:id).reorder(nil)
|
|
end
|
|
end
|
|
end
|