diff options
Diffstat (limited to 'app/finders')
-rw-r--r-- | app/finders/alert_management/alerts_finder.rb | 7 | ||||
-rw-r--r-- | app/finders/ci/daily_build_group_report_results_finder.rb | 13 | ||||
-rw-r--r-- | app/finders/ci/pipelines_finder.rb | 12 | ||||
-rw-r--r-- | app/finders/ci/pipelines_for_merge_request_finder.rb | 29 | ||||
-rw-r--r-- | app/finders/feature_flags_finder.rb | 6 | ||||
-rw-r--r-- | app/finders/group_descendants_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/group_members_finder.rb | 7 | ||||
-rw-r--r-- | app/finders/issuable_finder.rb | 9 | ||||
-rw-r--r-- | app/finders/issuable_finder/params.rb | 4 | ||||
-rw-r--r-- | app/finders/members_finder.rb | 9 | ||||
-rw-r--r-- | app/finders/merge_requests_finder.rb | 32 | ||||
-rw-r--r-- | app/finders/merge_requests_finder/params.rb | 25 | ||||
-rw-r--r-- | app/finders/releases/evidence_pipeline_finder.rb | 46 |
13 files changed, 165 insertions, 36 deletions
diff --git a/app/finders/alert_management/alerts_finder.rb b/app/finders/alert_management/alerts_finder.rb index 1d6f790af31..be3b329fb6f 100644 --- a/app/finders/alert_management/alerts_finder.rb +++ b/app/finders/alert_management/alerts_finder.rb @@ -18,6 +18,7 @@ module AlertManagement return AlertManagement::Alert.none unless authorized? collection = project.alert_management_alerts + collection = by_domain(collection) collection = by_status(collection) collection = by_iid(collection) collection = by_assignee(collection) @@ -30,6 +31,10 @@ module AlertManagement attr_reader :current_user, :project, :params + def by_domain(collection) + collection.with_operations_alerts + end + def by_iid(collection) return collection unless params[:iid] @@ -59,3 +64,5 @@ module AlertManagement end end end + +AlertManagement::AlertsFinder.prepend_if_ee('EE::AlertManagement::AlertsFinder') diff --git a/app/finders/ci/daily_build_group_report_results_finder.rb b/app/finders/ci/daily_build_group_report_results_finder.rb index ec41d9d2c45..ef97ccb4c0f 100644 --- a/app/finders/ci/daily_build_group_report_results_finder.rb +++ b/app/finders/ci/daily_build_group_report_results_finder.rb @@ -4,7 +4,7 @@ module Ci class DailyBuildGroupReportResultsFinder include Gitlab::Allowable - def initialize(current_user:, project:, ref_path:, start_date:, end_date:, limit: nil) + def initialize(current_user:, project:, ref_path: nil, start_date:, end_date:, limit: nil) @current_user = current_user @project = project @ref_path = ref_path @@ -35,11 +35,18 @@ module Ci end def query_params - { + params = { project_id: project, - ref_path: ref_path, date: start_date..end_date } + + if ref_path.present? + params[:ref_path] = ref_path + else + params[:default_branch] = true + end + + params end def none diff --git a/app/finders/ci/pipelines_finder.rb b/app/finders/ci/pipelines_finder.rb index 7347a83d294..a77faebb160 100644 --- a/app/finders/ci/pipelines_finder.rb +++ b/app/finders/ci/pipelines_finder.rb @@ -18,7 +18,9 @@ module Ci return Ci::Pipeline.none end - items = pipelines.no_child + items = pipelines + items = items.no_child unless params[:iids].present? + items = by_iids(items) items = by_scope(items) items = by_status(items) items = by_ref(items) @@ -52,6 +54,14 @@ module Ci project.repository.tag_names end + def by_iids(items) + if params[:iids].present? + items.for_iid(params[:iids]) + else + items + end + end + def by_scope(items) case params[:scope] when 'running' diff --git a/app/finders/ci/pipelines_for_merge_request_finder.rb b/app/finders/ci/pipelines_for_merge_request_finder.rb index 93d139652b9..da8dfc2579a 100644 --- a/app/finders/ci/pipelines_for_merge_request_finder.rb +++ b/app/finders/ci/pipelines_for_merge_request_finder.rb @@ -5,8 +5,6 @@ module Ci class PipelinesForMergeRequestFinder include Gitlab::Utils::StrongMemoize - EVENT = 'merge_request_event' - def initialize(merge_request, current_user) @merge_request = merge_request @current_user = current_user @@ -36,7 +34,11 @@ module Ci pipelines = if merge_request.persisted? - pipelines_using_cte + if Feature.enabled?(:ci_pipelines_for_merge_request_finder_new_cte, target_project) + pipelines_using_cte + else + pipelines_using_legacy_cte + end else triggered_for_branch.for_sha(commit_shas) end @@ -47,7 +49,7 @@ module Ci private - def pipelines_using_cte + def pipelines_using_legacy_cte cte = Gitlab::SQL::CTE.new(:shas, merge_request.all_commits.select(:sha)) source_sha_join = cte.table[:sha].eq(Ci::Pipeline.arel_table[:source_sha]) @@ -59,6 +61,16 @@ module Ci .from_union([merged_result_pipelines, detached_merge_request_pipelines, pipelines_for_branch]) end + def pipelines_using_cte + cte = Gitlab::SQL::CTE.new(:shas, merge_request.all_commits.select(:sha)) + + pipelines_for_merge_requests = triggered_by_merge_request + pipelines_for_branch = filter_by_sha(triggered_for_branch, cte) + + Ci::Pipeline.with(cte.to_arel) # rubocop: disable CodeReuse/ActiveRecord + .from_union([pipelines_for_merge_requests, pipelines_for_branch]) + end + def filter_by_sha(pipelines, cte) hex = Arel::Nodes::SqlLiteral.new("'hex'") string_sha = Arel::Nodes::NamedFunction.new('encode', [cte.table[:sha], hex]) @@ -84,14 +96,7 @@ module Ci end def triggered_for_branch - source_project.ci_pipelines - .where(source: branch_pipeline_sources, ref: source_branch, tag: false) # rubocop: disable CodeReuse/ActiveRecord - end - - def branch_pipeline_sources - strong_memoize(:branch_pipeline_sources) do - Ci::Pipeline.sources.reject { |source| source == EVENT }.values - end + source_project.all_pipelines.ci_branch_sources.for_branch(source_branch) end def sort(pipelines) diff --git a/app/finders/feature_flags_finder.rb b/app/finders/feature_flags_finder.rb index 9cb3bf7fa23..7b38841970d 100644 --- a/app/finders/feature_flags_finder.rb +++ b/app/finders/feature_flags_finder.rb @@ -24,11 +24,7 @@ class FeatureFlagsFinder private def feature_flags - if Feature.enabled?(:feature_flags_new_version, project, default_enabled: true) - project.operations_feature_flags - else - project.operations_feature_flags.legacy_flag - end + project.operations_feature_flags end def by_scope(items) diff --git a/app/finders/group_descendants_finder.rb b/app/finders/group_descendants_finder.rb index 1f6829a97d6..18ccea330af 100644 --- a/app/finders/group_descendants_finder.rb +++ b/app/finders/group_descendants_finder.rb @@ -176,7 +176,7 @@ class GroupDescendantsFinder end def sort - params.fetch(:sort, 'created_desc') + params.fetch(:sort, 'name_asc') end # rubocop: disable CodeReuse/ActiveRecord diff --git a/app/finders/group_members_finder.rb b/app/finders/group_members_finder.rb index 09283f061c0..2417b1e0771 100644 --- a/app/finders/group_members_finder.rb +++ b/app/finders/group_members_finder.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class GroupMembersFinder < UnionFinder + RELATIONS = %i(direct inherited descendants).freeze + DEFAULT_RELATIONS = %i(direct inherited).freeze + include CreatedAtFilter # Params can be any of the following: @@ -17,11 +20,11 @@ class GroupMembersFinder < UnionFinder @params = params end - def execute(include_relations: [:inherited, :direct]) + def execute(include_relations: DEFAULT_RELATIONS) group_members = group_members_list relations = [] - return group_members if include_relations == [:direct] + return filter_members(group_members) if include_relations == [:direct] relations << group_members if include_relations.include?(:direct) 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/issuable_finder/params.rb b/app/finders/issuable_finder/params.rb index 8a194f34f74..b481afee338 100644 --- a/app/finders/issuable_finder/params.rb +++ b/app/finders/issuable_finder/params.rb @@ -257,6 +257,10 @@ class IssuableFinder params.merge!(other) end + def parent + project || group + end + private def projects_public_or_visible_to_user diff --git a/app/finders/members_finder.rb b/app/finders/members_finder.rb index 013ed03a789..1ff2ad01b63 100644 --- a/app/finders/members_finder.rb +++ b/app/finders/members_finder.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class MembersFinder + RELATIONS = %i(direct inherited descendants invited_groups).freeze + DEFAULT_RELATIONS = %i(direct inherited).freeze + # Params can be any of the following: # sort: string # search: string @@ -13,7 +16,7 @@ class MembersFinder @params = params end - def execute(include_relations: [:inherited, :direct]) + def execute(include_relations: DEFAULT_RELATIONS) members = find_members(include_relations) filter_members(members) @@ -56,7 +59,7 @@ class MembersFinder def group_union_members(include_relations) [].tap do |members| members << direct_group_members(include_relations.include?(:descendants)) if group - members << project_invited_groups_members if include_relations.include?(:invited_groups_members) + members << project_invited_groups if include_relations.include?(:invited_groups) end end @@ -66,7 +69,7 @@ class MembersFinder GroupMembersFinder.new(group).execute(include_relations: requested_relations).non_invite.non_minimal_access # rubocop: disable CodeReuse/Finder end - def project_invited_groups_members + def project_invited_groups invited_groups_ids_including_ancestors = Gitlab::ObjectHierarchy .new(project.invited_groups) .base_and_ancestors 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 |