From 434a0ce52d75e13d48eac9ce83774954c7c5d48d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 30 Nov 2020 11:02:35 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-7-stable-ee --- app/finders/issuable_finder.rb | 9 ----- app/finders/merge_requests_finder.rb | 32 +++++++++++++++++ app/finders/merge_requests_finder/params.rb | 25 +++++++++++++ app/finders/releases/evidence_pipeline_finder.rb | 46 ++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 9 deletions(-) create mode 100644 app/finders/merge_requests_finder/params.rb create mode 100644 app/finders/releases/evidence_pipeline_finder.rb (limited to 'app/finders') diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index d431c3e3699..922b53b514d 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -339,15 +339,6 @@ class IssuableFinder cte << items items = klass.with(cte.to_arel).from(klass.table_name) - elsif Feature.enabled?(:pg_hint_plan_for_issuables, params.project) - items = items.optimizer_hints(<<~HINTS) - BitmapScan( - issues idx_issues_on_project_id_and_created_at_and_id_and_state_id - idx_issues_on_project_id_and_due_date_and_id_and_state_id - idx_issues_on_project_id_and_updated_at_and_id_and_state_id - index_issues_on_project_id_and_iid - ) - HINTS end items.full_search(search, matched_columns: params[:in], use_minimum_char_limit: !use_cte_for_search?) diff --git a/app/finders/merge_requests_finder.rb b/app/finders/merge_requests_finder.rb index 1f847b09752..978550aedaf 100644 --- a/app/finders/merge_requests_finder.rb +++ b/app/finders/merge_requests_finder.rb @@ -41,6 +41,8 @@ class MergeRequestsFinder < IssuableFinder :environment, :merged_after, :merged_before, + :reviewer_id, + :reviewer_username, :target_branch, :wip ] @@ -54,6 +56,10 @@ class MergeRequestsFinder < IssuableFinder MergeRequest end + def params_class + MergeRequestsFinder::Params + end + def filter_items(_items) items = by_commit(super) items = by_source_branch(items) @@ -62,12 +68,14 @@ class MergeRequestsFinder < IssuableFinder items = by_merged_at(items) items = by_approvals(items) items = by_deployments(items) + items = by_reviewer(items) by_source_project_id(items) end def filter_negated_items(items) items = super(items) + items = by_negated_reviewer(items) by_negated_target_branch(items) end @@ -186,6 +194,30 @@ class MergeRequestsFinder < IssuableFinder items.where_exists(deploys) end + + def by_reviewer(items) + return items unless params.reviewer_id? || params.reviewer_username? + + if params.filter_by_no_reviewer? + items.no_review_requested + elsif params.filter_by_any_reviewer? + items.review_requested + elsif params.reviewer + items.review_requested_to(params.reviewer) + else # reviewer not found + items.none + end + end + + def by_negated_reviewer(items) + return items unless not_params.reviewer_id? || not_params.reviewer_username? + + if not_params.reviewer.present? + items.no_review_requested_to(not_params.reviewer) + else # reviewer not found + items.none + end + end end MergeRequestsFinder.prepend_if_ee('EE::MergeRequestsFinder') diff --git a/app/finders/merge_requests_finder/params.rb b/app/finders/merge_requests_finder/params.rb new file mode 100644 index 00000000000..e44e96054d3 --- /dev/null +++ b/app/finders/merge_requests_finder/params.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class MergeRequestsFinder + class Params < IssuableFinder::Params + def filter_by_no_reviewer? + params[:reviewer_id].to_s.downcase == FILTER_NONE + end + + def filter_by_any_reviewer? + params[:reviewer_id].to_s.downcase == FILTER_ANY + end + + def reviewer + strong_memoize(:reviewer) do + if reviewer_id? + User.find_by_id(params[:reviewer_id]) + elsif reviewer_username? + User.find_by_username(params[:reviewer_username]) + else + nil + end + end + end + end +end diff --git a/app/finders/releases/evidence_pipeline_finder.rb b/app/finders/releases/evidence_pipeline_finder.rb new file mode 100644 index 00000000000..2e706087feb --- /dev/null +++ b/app/finders/releases/evidence_pipeline_finder.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +module Releases + class EvidencePipelineFinder + include Gitlab::Utils::StrongMemoize + + attr_reader :project, :params + + def initialize(project, params = {}) + @project = project + @params = params + end + + def execute + # TODO: remove this with the release creation moved to it's own form https://gitlab.com/gitlab-org/gitlab/-/issues/214245 + return params[:evidence_pipeline] if params[:evidence_pipeline] + + sha = existing_tag&.dereferenced_target&.sha + sha ||= repository&.commit(ref)&.sha + + return unless sha + + project.ci_pipelines.for_sha(sha).last + end + + private + + def repository + strong_memoize(:repository) do + project.repository + end + end + + def existing_tag + repository.find_tag(tag_name) + end + + def tag_name + params[:tag] + end + + def ref + params[:ref] + end + end +end -- cgit v1.2.1