From aee0a117a889461ce8ced6fcf73207fe017f1d99 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 20 Dec 2021 13:37:47 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-6-stable-ee --- app/presenters/blob_presenter.rb | 53 +++++------- app/presenters/ci/pipeline_presenter.rb | 16 ++-- app/presenters/commit_status_presenter.rb | 3 +- app/presenters/merge_request_presenter.rb | 11 ++- app/presenters/packages/npm/package_presenter.rb | 10 +-- .../projects/security/configuration_presenter.rb | 98 ++++++++++++++++++++++ app/presenters/prometheus_alert_presenter.rb | 2 - app/presenters/snippet_blob_presenter.rb | 2 + 8 files changed, 147 insertions(+), 48 deletions(-) create mode 100644 app/presenters/projects/security/configuration_presenter.rb (limited to 'app/presenters') diff --git a/app/presenters/blob_presenter.rb b/app/presenters/blob_presenter.rb index 5835a77d0b9..3bd92ebc942 100644 --- a/app/presenters/blob_presenter.rb +++ b/app/presenters/blob_presenter.rb @@ -15,19 +15,8 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated Gitlab::Highlight.highlight( blob.path, - limited_blob_data(to: to), - language: language, - plain: plain - ) - end - - def highlight_transformed(plain: nil) - load_all_blob_data - - Gitlab::Highlight.highlight( - blob.path, - transformed_blob_data, - language: transformed_blob_language, + blob_data(to), + language: blob_language, plain: plain ) end @@ -38,6 +27,14 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated highlight(plain: false) end + def blob_data(to) + @_blob_data ||= Gitlab::Diff::CustomDiff.transformed_blob_data(blob) || limited_blob_data(to: to) + end + + def blob_language + @_blob_language ||= Gitlab::Diff::CustomDiff.transformed_blob_language(blob) || language + end + def raw_plain_data blob.data unless blob.binary? end @@ -66,6 +63,11 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated project_ci_pipeline_editor_path(project, branch_name: blob.commit_id) if can_collaborate_with_project?(project) && blob.path == project.ci_config_path_or_default end + # Will be overridden in EE + def code_owners + [] + end + def fork_and_edit_path fork_path_for_current_user(project, edit_blob_path) end @@ -78,6 +80,12 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated super(blob, project, blob.commit_id) end + def can_current_user_push_to_branch? + return false unless current_user && project.repository.branch_exists?(blob.commit_id) + + user_access(project).can_push_to_branch?(blob.commit_id) + end + def ide_edit_path super(project, blob.commit_id, blob.path) end @@ -123,21 +131,6 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated def language blob.language_from_gitattributes end - - def transformed_blob_language - @transformed_blob_language ||= blob.path.ends_with?('.ipynb') ? 'md' : language - end - - def transformed_blob_data - @transformed_blob ||= if blob.path.ends_with?('.ipynb') && blob.transformed_for_diff - IpynbDiff.transform(blob.data, - raise_errors: true, - options: { include_metadata: false, cell_decorator: :percent }) - end - - @transformed_blob ||= blob.data - rescue IpynbDiff::InvalidNotebookError => e - Gitlab::ErrorTracking.log_exception(e) - blob.data - end end + +BlobPresenter.prepend_mod_with('BlobPresenter') diff --git a/app/presenters/ci/pipeline_presenter.rb b/app/presenters/ci/pipeline_presenter.rb index e0cb899c9d3..7f5dffadcfb 100644 --- a/app/presenters/ci/pipeline_presenter.rb +++ b/app/presenters/ci/pipeline_presenter.rb @@ -3,7 +3,6 @@ module Ci class PipelinePresenter < Gitlab::View::Presenter::Delegated include Gitlab::Utils::StrongMemoize - include ActionView::Helpers::UrlHelper delegator_override_with Gitlab::Utils::StrongMemoize # TODO: Remove `Gitlab::Utils::StrongMemoize` inclusion as it's duplicate delegator_override_with ActionView::Helpers::TagHelper # TODO: Remove `ActionView::Helpers::UrlHelper` inclusion as it overrides `Ci::Pipeline#tag` @@ -62,6 +61,13 @@ module Ci localized_names.fetch(pipeline.merge_request_event_type, s_('Pipeline|Pipeline')) end + delegator_override :coverage + def coverage + return unless pipeline.coverage.present? + + '%.2f' % pipeline.coverage + end + def ref_text if pipeline.detached_merge_request_pipeline? _("for %{link_to_merge_request} with %{link_to_merge_request_source_branch}") @@ -101,7 +107,7 @@ module Ci end def link_to_pipeline_ref - link_to(pipeline.ref, + ApplicationController.helpers.link_to(pipeline.ref, project_commits_path(pipeline.project, pipeline.ref), class: "ref-name") end @@ -109,7 +115,7 @@ module Ci def link_to_merge_request return unless merge_request_presenter - link_to(merge_request_presenter.to_reference, + ApplicationController.helpers.link_to(merge_request_presenter.to_reference, project_merge_request_path(merge_request_presenter.project, merge_request_presenter), class: 'mr-iid') end @@ -136,7 +142,7 @@ module Ci private def plain_ref_name - content_tag(:span, pipeline.ref, class: 'ref-name') + ApplicationController.helpers.content_tag(:span, pipeline.ref, class: 'ref-name') end def merge_request_presenter @@ -153,7 +159,7 @@ module Ci all_related_merge_requests.first(limit).map do |merge_request| mr_path = project_merge_request_path(merge_request.project, merge_request) - link_to "#{merge_request.to_reference} #{merge_request.title}", mr_path, class: 'mr-iid' + ApplicationController.helpers.link_to "#{merge_request.to_reference} #{merge_request.title}", mr_path, class: 'mr-iid' end end diff --git a/app/presenters/commit_status_presenter.rb b/app/presenters/commit_status_presenter.rb index 7919e501bf0..250715d7c9c 100644 --- a/app/presenters/commit_status_presenter.rb +++ b/app/presenters/commit_status_presenter.rb @@ -29,7 +29,8 @@ class CommitStatusPresenter < Gitlab::View::Presenter::Delegated no_matching_runner: 'No matching runner available', trace_size_exceeded: 'The job log size limit was reached', builds_disabled: 'The CI/CD is disabled for this project', - environment_creation_failure: 'This job could not be executed because it would create an environment with an invalid parameter.' + environment_creation_failure: 'This job could not be executed because it would create an environment with an invalid parameter.', + deployment_rejected: 'This deployment job was rejected.' }.freeze TROUBLESHOOTING_DOC = { diff --git a/app/presenters/merge_request_presenter.rb b/app/presenters/merge_request_presenter.rb index d19d4964524..eeb94a8e657 100644 --- a/app/presenters/merge_request_presenter.rb +++ b/app/presenters/merge_request_presenter.rb @@ -136,7 +136,7 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated pipeline: :gfm, author: author, project: project, - issuable_state_filter_enabled: true + issuable_reference_expansion_enabled: true ) end @@ -146,7 +146,7 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated pipeline: :gfm, author: author, project: project, - issuable_state_filter_enabled: true + issuable_reference_expansion_enabled: true ) end @@ -254,6 +254,13 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated end end + delegator_override :pipeline_coverage_delta + def pipeline_coverage_delta + return unless merge_request.pipeline_coverage_delta.present? + + '%.2f' % merge_request.pipeline_coverage_delta + end + private def cached_can_be_reverted? diff --git a/app/presenters/packages/npm/package_presenter.rb b/app/presenters/packages/npm/package_presenter.rb index 9e3308c2573..c30dfa6196b 100644 --- a/app/presenters/packages/npm/package_presenter.rb +++ b/app/presenters/packages/npm/package_presenter.rb @@ -12,10 +12,9 @@ module Packages attr_reader :name, :packages - def initialize(name, packages, include_metadata: false) + def initialize(name, packages) @name = name @packages = packages - @include_metadata = include_metadata end def versions @@ -24,10 +23,7 @@ module Packages packages.each_batch do |relation| batched_packages = relation.including_dependency_links .preload_files - - if @include_metadata - batched_packages = batched_packages.preload_npm_metadatum - end + .preload_npm_metadatum batched_packages.each do |package| package_file = package.package_files.last @@ -92,8 +88,6 @@ module Packages end def abbreviated_package_json(package) - return {} unless @include_metadata - json = package.npm_metadatum&.package_json || {} json.slice(*PACKAGE_JSON_ALLOWED_FIELDS) end diff --git a/app/presenters/projects/security/configuration_presenter.rb b/app/presenters/projects/security/configuration_presenter.rb new file mode 100644 index 00000000000..89fca1a451a --- /dev/null +++ b/app/presenters/projects/security/configuration_presenter.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +module Projects + module Security + class ConfigurationPresenter < Gitlab::View::Presenter::Delegated + include AutoDevopsHelper + include ::Security::LatestPipelineInformation + + presents ::Project, as: :project + + def to_h + { + auto_devops_enabled: auto_devops_source?, + auto_devops_help_page_path: help_page_path('topics/autodevops/index'), + auto_devops_path: auto_devops_settings_path(project), + can_enable_auto_devops: can_enable_auto_devops?, + features: features, + help_page_path: help_page_path('user/application_security/index'), + latest_pipeline_path: latest_pipeline_path, + # TODO: gitlab_ci_present will incorrectly report `false` if the CI/CD configuration file name + # has been customized and a file with the given custom name exists in the repo. This edge case + # will be addressed in https://gitlab.com/gitlab-org/gitlab/-/issues/342465 + gitlab_ci_present: project.repository.gitlab_ci_yml.present?, + gitlab_ci_history_path: gitlab_ci_history_path, + auto_fix_enabled: autofix_enabled, + can_toggle_auto_fix_settings: can_toggle_autofix, + auto_fix_user_path: auto_fix_user_path + } + end + + def to_html_data_attribute + data = to_h + data[:features] = data[:features].to_json + data[:auto_fix_enabled] = data[:auto_fix_enabled].to_json + + data + end + + private + + def autofix_enabled; end + + def auto_fix_user_path; end + + def can_enable_auto_devops? + feature_available?(:builds, current_user) && + can?(current_user, :admin_project, self) && + !archived? + end + + def can_toggle_autofix; end + + def gitlab_ci_history_path + return '' if project.empty_repo? + + gitlab_ci = ::Gitlab::FileDetector::PATTERNS[:gitlab_ci] + ::Gitlab::Routing.url_helpers.project_blame_path(project, File.join(project.default_branch_or_main, gitlab_ci)) + end + + def features + scans = scan_types.map do |scan_type| + scan(scan_type, configured: scanner_enabled?(scan_type)) + end + + # These scans are "fake" (non job) entries. Add them manually. + scans << scan(:corpus_management, configured: true) + scans << scan(:dast_profiles, configured: true) + end + + def latest_pipeline_path + return help_page_path('ci/pipelines') unless latest_default_branch_pipeline + + project_pipeline_path(self, latest_default_branch_pipeline) + end + + def scan(type, configured: false) + scan = ::Gitlab::Security::ScanConfiguration.new(project: project, type: type, configured: configured) + + { + type: scan.type, + configured: scan.configured?, + configuration_path: scan.configuration_path, + available: scan.available? + } + end + + def scan_types + ::Security::SecurityJobsFinder.allowed_job_types + ::Security::LicenseComplianceJobsFinder.allowed_job_types + end + + def project_settings + project.security_setting + end + end + end +end + +Projects::Security::ConfigurationPresenter.prepend_mod_with('Projects::Security::ConfigurationPresenter') diff --git a/app/presenters/prometheus_alert_presenter.rb b/app/presenters/prometheus_alert_presenter.rb index 714329ede71..776e2baebdd 100644 --- a/app/presenters/prometheus_alert_presenter.rb +++ b/app/presenters/prometheus_alert_presenter.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true class PrometheusAlertPresenter < Gitlab::View::Presenter::Delegated - include ActionView::Helpers::UrlHelper - presents ::PrometheusAlert, as: :prometheus_alert def humanized_text diff --git a/app/presenters/snippet_blob_presenter.rb b/app/presenters/snippet_blob_presenter.rb index 4072696eb89..026d442291c 100644 --- a/app/presenters/snippet_blob_presenter.rb +++ b/app/presenters/snippet_blob_presenter.rb @@ -57,3 +57,5 @@ class SnippetBlobPresenter < BlobPresenter gitlab_raw_snippet_blob_url(snippet, blob.path, only_path: only_path) end end + +SnippetBlobPresenter.prepend_mod -- cgit v1.2.1