summaryrefslogtreecommitdiff
path: root/lib/banzai/reference_parser
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-31 12:10:34 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-31 12:10:34 +0000
commit7dc0a21702cd9345eeee385d8ce20002d9c9fb36 (patch)
treea369b90331ed6f61a37477e5e5713fcccfd45b4c /lib/banzai/reference_parser
parente5f7ee6673f47290d860565f13a5a26391822260 (diff)
downloadgitlab-ce-7dc0a21702cd9345eeee385d8ce20002d9c9fb36.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/banzai/reference_parser')
-rw-r--r--lib/banzai/reference_parser/merge_request_parser.rb24
1 files changed, 21 insertions, 3 deletions
diff --git a/lib/banzai/reference_parser/merge_request_parser.rb b/lib/banzai/reference_parser/merge_request_parser.rb
index 78cbf4a807d..1664fa1f9ff 100644
--- a/lib/banzai/reference_parser/merge_request_parser.rb
+++ b/lib/banzai/reference_parser/merge_request_parser.rb
@@ -7,6 +7,19 @@ module Banzai
self.reference_type = :merge_request
+ def nodes_visible_to_user(user, nodes)
+ return super if Feature.disabled?(:optimize_merge_request_parser, user, default_enabled: :yaml)
+
+ merge_request_nodes = nodes.select { |node| node.has_attribute?(self.class.data_attribute) }
+ records = projects_for_nodes(merge_request_nodes)
+
+ merge_request_nodes.select do |node|
+ project = records[node]
+
+ project && can_read_reference?(user, project)
+ end
+ end
+
def records_for_nodes(nodes)
@merge_requests_for_nodes ||= grouped_objects_for_nodes(
nodes,
@@ -23,14 +36,19 @@ module Banzai
)
end
- def can_read_reference?(user, merge_request)
+ def can_read_reference?(user, object)
memo = strong_memoize(:can_read_reference) { {} }
- project_id = merge_request.project_id
+ project_id = object.project_id
return memo[project_id] if memo.key?(project_id)
- memo[project_id] = can?(user, :read_merge_request_iid, merge_request.project)
+ memo[project_id] = can?(user, :read_merge_request_iid, object)
+ end
+
+ def projects_for_nodes(nodes)
+ @projects_for_nodes ||=
+ grouped_objects_for_nodes(nodes, Project.includes(:project_feature, :group, :namespace), 'data-project')
end
end
end