Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-12-17 14:59:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-12-17 14:59:07 +0300
commit8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch)
tree544930fb309b30317ae9797a9683768705d664c4 /app/finders
parent4b1de649d0168371549608993deac953eb692019 (diff)
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'app/finders')
-rw-r--r--app/finders/alert_management/alerts_finder.rb7
-rw-r--r--app/finders/ci/daily_build_group_report_results_finder.rb13
-rw-r--r--app/finders/ci/pipelines_finder.rb12
-rw-r--r--app/finders/ci/pipelines_for_merge_request_finder.rb29
-rw-r--r--app/finders/feature_flags_finder.rb6
-rw-r--r--app/finders/group_descendants_finder.rb2
-rw-r--r--app/finders/group_members_finder.rb7
-rw-r--r--app/finders/issuable_finder.rb9
-rw-r--r--app/finders/issuable_finder/params.rb4
-rw-r--r--app/finders/members_finder.rb9
-rw-r--r--app/finders/merge_requests_finder.rb32
-rw-r--r--app/finders/merge_requests_finder/params.rb25
-rw-r--r--app/finders/releases/evidence_pipeline_finder.rb46
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