summaryrefslogtreecommitdiff
path: root/app/presenters
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 11:10:13 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 11:10:13 +0000
commit0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch)
tree7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /app/presenters
parent72123183a20411a36d607d70b12d57c484394c8e (diff)
downloadgitlab-ce-0ea3fcec397b69815975647f5e2aa5fe944a8486.tar.gz
Add latest changes from gitlab-org/gitlab@15-1-stable-eev15.1.0-rc42
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/blob_presenter.rb4
-rw-r--r--app/presenters/ci/pipeline_presenter.rb3
-rw-r--r--app/presenters/merge_request_presenter.rb14
-rw-r--r--app/presenters/packages/pypi/package_presenter.rb96
-rw-r--r--app/presenters/packages/pypi/simple_index_presenter.rb50
-rw-r--r--app/presenters/packages/pypi/simple_package_versions_presenter.rb58
-rw-r--r--app/presenters/packages/pypi/simple_presenter_base.rb53
-rw-r--r--app/presenters/project_presenter.rb17
-rw-r--r--app/presenters/projects/security/configuration_presenter.rb3
-rw-r--r--app/presenters/projects/settings/deploy_keys_presenter.rb2
-rw-r--r--app/presenters/releases/link_presenter.rb12
-rw-r--r--app/presenters/service_hook_presenter.rb4
-rw-r--r--app/presenters/snippet_blob_presenter.rb2
13 files changed, 195 insertions, 123 deletions
diff --git a/app/presenters/blob_presenter.rb b/app/presenters/blob_presenter.rb
index aeab914dc9e..2dcc6cd5df3 100644
--- a/app/presenters/blob_presenter.rb
+++ b/app/presenters/blob_presenter.rb
@@ -27,11 +27,11 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated
end
def blob_data(to)
- @_blob_data ||= Gitlab::Diff::CustomDiff.transformed_blob_data(blob) || limited_blob_data(to: to)
+ @_blob_data ||= limited_blob_data(to: to)
end
def blob_language
- @_blob_language ||= Gitlab::Diff::CustomDiff.transformed_blob_language(blob) || gitattr_language || detect_language
+ @_blob_language ||= gitattr_language || detect_language
end
def raw_plain_data
diff --git a/app/presenters/ci/pipeline_presenter.rb b/app/presenters/ci/pipeline_presenter.rb
index 410b633df50..887980430f4 100644
--- a/app/presenters/ci/pipeline_presenter.rb
+++ b/app/presenters/ci/pipeline_presenter.rb
@@ -17,8 +17,7 @@ module Ci
size_limit_exceeded: 'The pipeline size limit was exceeded.',
job_activity_limit_exceeded: 'The pipeline job activity limit was exceeded.',
deployments_limit_exceeded: 'The pipeline deployments limit was exceeded.',
- project_deleted: 'The project associated with this pipeline was deleted.',
- user_blocked: 'The user who created this pipeline is blocked.' }
+ project_deleted: 'The project associated with this pipeline was deleted.' }
end
presents ::Ci::Pipeline, as: :pipeline
diff --git a/app/presenters/merge_request_presenter.rb b/app/presenters/merge_request_presenter.rb
index 6dd3908b21d..efab1e84923 100644
--- a/app/presenters/merge_request_presenter.rb
+++ b/app/presenters/merge_request_presenter.rb
@@ -191,13 +191,17 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated
end
def mergeable_discussions_state
- # This avoids calling MergeRequest#mergeable_discussions_state without
- # considering the state of the MR first. If a MR isn't mergeable, we can
- # safely short-circuit it.
- if merge_request.mergeable_state?(skip_ci_check: true, skip_discussions_check: true)
+ if Feature.enabled?(:change_response_code_merge_status, project)
merge_request.mergeable_discussions_state?
else
- false
+ # This avoids calling MergeRequest#mergeable_discussions_state without
+ # considering the state of the MR first. If a MR isn't mergeable, we can
+ # safely short-circuit it.
+ if merge_request.mergeable_state?(skip_ci_check: true, skip_discussions_check: true)
+ merge_request.mergeable_discussions_state?
+ else
+ false
+ end
end
end
diff --git a/app/presenters/packages/pypi/package_presenter.rb b/app/presenters/packages/pypi/package_presenter.rb
deleted file mode 100644
index a779ce41cf9..00000000000
--- a/app/presenters/packages/pypi/package_presenter.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-# frozen_string_literal: true
-
-# Display package version data acording to PyPI
-# Simple API: https://warehouse.pypa.io/api-reference/legacy/#simple-project-api
-module Packages
- module Pypi
- class PackagePresenter
- include API::Helpers::RelatedResourcesHelpers
-
- def initialize(packages, project_or_group)
- @packages = packages
- @project_or_group = project_or_group
- end
-
- # Returns the HTML body for PyPI simple API.
- # Basically a list of package download links for a specific
- # package
- def body
- <<-HTML
- <!DOCTYPE html>
- <html>
- <head>
- <title>Links for #{escape(name)}</title>
- </head>
- <body>
- <h1>Links for #{escape(name)}</h1>
- #{links}
- </body>
- </html>
- HTML
- end
-
- private
-
- def links
- refs = []
-
- @packages.map do |package|
- package_files = package.installable_package_files
-
- package_files.each do |file|
- url = build_pypi_package_path(file)
-
- refs << package_link(url, package.pypi_metadatum.required_python, file.file_name)
- end
- end
-
- refs.join
- end
-
- def package_link(url, required_python, filename)
- "<a href=\"#{url}\" data-requires-python=\"#{escape(required_python)}\">#{filename}</a><br>"
- end
-
- def build_pypi_package_path(file)
- params = {
- id: @project_or_group.id,
- sha256: file.file_sha256,
- file_identifier: file.file_name
- }
-
- if project?
- expose_url(
- api_v4_projects_packages_pypi_files_file_identifier_path(
- params, true
- )
- ) + "#sha256=#{file.file_sha256}"
- elsif group?
- expose_url(
- api_v4_groups___packages_pypi_files_file_identifier_path(
- params, true
- )
- ) + "#sha256=#{file.file_sha256}"
- else
- ''
- end
- end
-
- def name
- @packages.first.name
- end
-
- def escape(str)
- ERB::Util.html_escape(str)
- end
-
- def project?
- @project_or_group.is_a?(::Project)
- end
-
- def group?
- @project_or_group.is_a?(::Group)
- end
- end
- end
-end
diff --git a/app/presenters/packages/pypi/simple_index_presenter.rb b/app/presenters/packages/pypi/simple_index_presenter.rb
new file mode 100644
index 00000000000..ffe4eeb9585
--- /dev/null
+++ b/app/presenters/packages/pypi/simple_index_presenter.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+# Display package repository index acording to PyPI
+# Simple API: https://peps.python.org/pep-0503/
+module Packages
+ module Pypi
+ class SimpleIndexPresenter < SimplePresenterBase
+ private
+
+ def links
+ refs = []
+
+ available_packages.each_batch do |batch|
+ batch.each do |package|
+ url = build_pypi_package_path(package)
+
+ refs << package_link(url, package.pypi_metadatum.required_python, package.name)
+ end
+ end
+
+ refs.join
+ end
+
+ def build_pypi_package_path(package)
+ params = {
+ id: @project_or_group.id,
+ package_name: package.normalized_pypi_name
+ }
+
+ if project?
+ expose_url(
+ api_v4_projects_packages_pypi_simple_package_name_path(
+ params, true
+ )
+ )
+ elsif group?
+ expose_url(
+ api_v4_groups___packages_pypi_simple_package_name_path(
+ params, true
+ )
+ )
+ end
+ end
+
+ def body_name
+ @project_or_group.name
+ end
+ end
+ end
+end
diff --git a/app/presenters/packages/pypi/simple_package_versions_presenter.rb b/app/presenters/packages/pypi/simple_package_versions_presenter.rb
new file mode 100644
index 00000000000..0baa0714463
--- /dev/null
+++ b/app/presenters/packages/pypi/simple_package_versions_presenter.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+# Display package version data acording to PyPI
+# Simple API: https://warehouse.pypa.io/api-reference/legacy/#simple-project-api
+# Generates the HTML body for PyPI simple API.
+# Basically a list of package download links for a specific
+# package
+module Packages
+ module Pypi
+ class SimplePackageVersionsPresenter < SimplePresenterBase
+ private
+
+ def links
+ refs = []
+
+ available_packages.each_batch do |batch|
+ batch.each do |package|
+ package_files = package.installable_package_files
+
+ package_files.each do |file|
+ url = build_pypi_package_file_path(file)
+
+ refs << package_link(url, package.pypi_metadatum.required_python, file.file_name)
+ end
+ end
+ end
+
+ refs.join
+ end
+
+ def build_pypi_package_file_path(file)
+ params = {
+ id: @project_or_group.id,
+ sha256: file.file_sha256,
+ file_identifier: file.file_name
+ }
+
+ if project?
+ expose_url(
+ api_v4_projects_packages_pypi_files_file_identifier_path(
+ params, true
+ )
+ ) + "#sha256=#{file.file_sha256}"
+ elsif group?
+ expose_url(
+ api_v4_groups___packages_pypi_files_file_identifier_path(
+ params, true
+ )
+ ) + "#sha256=#{file.file_sha256}"
+ end
+ end
+
+ def body_name
+ @packages.first.name
+ end
+ end
+ end
+end
diff --git a/app/presenters/packages/pypi/simple_presenter_base.rb b/app/presenters/packages/pypi/simple_presenter_base.rb
new file mode 100644
index 00000000000..a459319539c
--- /dev/null
+++ b/app/presenters/packages/pypi/simple_presenter_base.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+# Display package version data acording to PyPI
+# Simple API: https://warehouse.pypa.io/api-reference/legacy/#simple-project-api
+module Packages
+ module Pypi
+ class SimplePresenterBase
+ include API::Helpers::RelatedResourcesHelpers
+
+ def initialize(packages, project_or_group)
+ @packages = packages
+ @project_or_group = project_or_group
+ end
+
+ def body
+ <<-HTML
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <title>Links for #{escape(body_name)}</title>
+ </head>
+ <body>
+ <h1>Links for #{escape(body_name)}</h1>
+ #{links}
+ </body>
+ </html>
+ HTML
+ end
+
+ private
+
+ def package_link(url, required_python, name)
+ "<a href=\"#{url}\" data-requires-python=\"#{escape(required_python)}\">#{name}</a>"
+ end
+
+ def escape(str)
+ ERB::Util.html_escape(str)
+ end
+
+ def project?
+ @project_or_group.is_a?(::Project)
+ end
+
+ def group?
+ @project_or_group.is_a?(::Group)
+ end
+
+ def available_packages
+ @packages.not_pending_destruction
+ end
+ end
+ end
+end
diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb
index af1b254c46f..84aec19cba0 100644
--- a/app/presenters/project_presenter.rb
+++ b/app/presenters/project_presenter.rb
@@ -28,7 +28,6 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
commits_anchor_data,
branches_anchor_data,
tags_anchor_data,
- files_anchor_data,
storage_anchor_data,
releases_anchor_data
].compact.select(&:is_link)
@@ -161,26 +160,16 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
can_current_user_push_to_branch?(default_branch)
end
- def files_anchor_data
- AnchorData.new(true,
- statistic_icon('doc-code') +
- _('%{strong_start}%{human_size}%{strong_end} Files').html_safe % {
- human_size: storage_counter(statistics.total_repository_size),
- strong_start: '<strong class="project-stat-value">'.html_safe,
- strong_end: '</strong>'.html_safe
- },
- empty_repo? ? nil : project_tree_path(project))
- end
-
def storage_anchor_data
+ can_show_quota = can?(current_user, :admin_project, project) && !empty_repo?
AnchorData.new(true,
statistic_icon('disk') +
- _('%{strong_start}%{human_size}%{strong_end} Storage').html_safe % {
+ _('%{strong_start}%{human_size}%{strong_end} Project Storage').html_safe % {
human_size: storage_counter(statistics.storage_size),
strong_start: '<strong class="project-stat-value">'.html_safe,
strong_end: '</strong>'.html_safe
},
- empty_repo? ? nil : project_tree_path(project))
+ can_show_quota ? project_usage_quotas_path(project) : nil)
end
def releases_anchor_data
diff --git a/app/presenters/projects/security/configuration_presenter.rb b/app/presenters/projects/security/configuration_presenter.rb
index 772be0125a0..8a6569e7bf3 100644
--- a/app/presenters/projects/security/configuration_presenter.rb
+++ b/app/presenters/projects/security/configuration_presenter.rb
@@ -24,7 +24,8 @@ module Projects
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
+ auto_fix_user_path: auto_fix_user_path,
+ security_training_enabled: project.security_training_available?
}
end
diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb
index e3323b75188..b760786aa4c 100644
--- a/app/presenters/projects/settings/deploy_keys_presenter.rb
+++ b/app/presenters/projects/settings/deploy_keys_presenter.rb
@@ -58,7 +58,7 @@ module Projects
end
def as_json
- serializer = DeployKeySerializer.new # rubocop: disable CodeReuse/Serializer
+ serializer = DeployKeys::DeployKeySerializer.new # rubocop: disable CodeReuse/Serializer
opts = { user: current_user, project: project, readable_project_ids: readable_project_ids }
{
diff --git a/app/presenters/releases/link_presenter.rb b/app/presenters/releases/link_presenter.rb
new file mode 100644
index 00000000000..cc89762a922
--- /dev/null
+++ b/app/presenters/releases/link_presenter.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+module Releases
+ class LinkPresenter < Gitlab::View::Presenter::Delegated
+ def direct_asset_url
+ return @subject.url unless @subject.filepath
+
+ release = @subject.release.present
+ release.download_url(@subject.filepath)
+ end
+ end
+end
diff --git a/app/presenters/service_hook_presenter.rb b/app/presenters/service_hook_presenter.rb
index f2a06358918..b34679c85cf 100644
--- a/app/presenters/service_hook_presenter.rb
+++ b/app/presenters/service_hook_presenter.rb
@@ -4,10 +4,10 @@ class ServiceHookPresenter < Gitlab::View::Presenter::Delegated
presents ::ServiceHook, as: :service_hook
def logs_details_path(log)
- project_integration_hook_log_path(integration.project, integration, log)
+ project_settings_integration_hook_log_path(integration.project, integration, log)
end
def logs_retry_path(log)
- retry_project_integration_hook_log_path(integration.project, integration, log)
+ retry_project_settings_integration_hook_log_path(integration.project, integration, log)
end
end
diff --git a/app/presenters/snippet_blob_presenter.rb b/app/presenters/snippet_blob_presenter.rb
index 51ce6ccea58..2e5d3ae21d9 100644
--- a/app/presenters/snippet_blob_presenter.rb
+++ b/app/presenters/snippet_blob_presenter.rb
@@ -3,6 +3,8 @@
class SnippetBlobPresenter < BlobPresenter
include GitlabRoutingHelper
+ delegator_override_with Gitlab::Utils::StrongMemoize # This module inclusion is expected. See https://gitlab.com/gitlab-org/gitlab/-/issues/352884.
+
presents ::SnippetBlob
def rich_data