diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-31 15:10:34 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-31 15:10:34 +0300 |
commit | 7dc0a21702cd9345eeee385d8ce20002d9c9fb36 (patch) | |
tree | a369b90331ed6f61a37477e5e5713fcccfd45b4c /lib | |
parent | e5f7ee6673f47290d860565f13a5a26391822260 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r-- | lib/banzai/reference_parser/merge_request_parser.rb | 24 | ||||
-rw-r--r-- | lib/gitlab/ci/parsers/test/junit.rb | 5 | ||||
-rw-r--r-- | lib/gitlab/usage_data.rb | 2 |
3 files changed, 27 insertions, 4 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 diff --git a/lib/gitlab/ci/parsers/test/junit.rb b/lib/gitlab/ci/parsers/test/junit.rb index ca7fbde6713..200e58ffc50 100644 --- a/lib/gitlab/ci/parsers/test/junit.rb +++ b/lib/gitlab/ci/parsers/test/junit.rb @@ -66,6 +66,7 @@ module Gitlab status = ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED system_output = data['failure'] attachment = attachment_path(data['system_out']) + attachment = remove_project_prefix(attachment, job) elsif data.key?('error') status = ::Gitlab::Ci::Reports::TestCase::STATUS_ERROR system_output = data['error'] @@ -100,6 +101,10 @@ module Gitlab matches = data.match(ATTACHMENT_TAG_REGEX) matches[:path] if matches end + + def remove_project_prefix(attachment, job) + attachment&.delete_prefix(job.variables['CI_PROJECT_DIR']&.value || '') + end end end end diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb index 6048a3b2283..f8078e6108a 100644 --- a/lib/gitlab/usage_data.rb +++ b/lib/gitlab/usage_data.rb @@ -166,7 +166,7 @@ module Gitlab projects_with_error_tracking_enabled: count(::ErrorTracking::ProjectErrorTrackingSetting.where(enabled: true)), projects_with_alerts_created: distinct_count(::AlertManagement::Alert, :project_id), projects_with_enabled_alert_integrations: distinct_count(::AlertManagement::HttpIntegration.active, :project_id), - projects_with_prometheus_alerts: distinct_count(PrometheusAlert, :project_id), + projects_with_prometheus_alerts: DEPRECATED_VALUE, projects_with_terraform_reports: distinct_count(::Ci::JobArtifact.terraform_reports, :project_id), projects_with_terraform_states: distinct_count(::Terraform::State, :project_id), protected_branches: count(ProtectedBranch), |