summaryrefslogtreecommitdiff
path: root/app/presenters
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 13:37:47 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 13:37:47 +0000
commitaee0a117a889461ce8ced6fcf73207fe017f1d99 (patch)
tree891d9ef189227a8445d83f35c1b0fc99573f4380 /app/presenters
parent8d46af3258650d305f53b819eabf7ab18d22f59e (diff)
downloadgitlab-ce-aee0a117a889461ce8ced6fcf73207fe017f1d99.tar.gz
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/blob_presenter.rb53
-rw-r--r--app/presenters/ci/pipeline_presenter.rb16
-rw-r--r--app/presenters/commit_status_presenter.rb3
-rw-r--r--app/presenters/merge_request_presenter.rb11
-rw-r--r--app/presenters/packages/npm/package_presenter.rb10
-rw-r--r--app/presenters/projects/security/configuration_presenter.rb98
-rw-r--r--app/presenters/prometheus_alert_presenter.rb2
-rw-r--r--app/presenters/snippet_blob_presenter.rb2
8 files changed, 147 insertions, 48 deletions
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