diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-20 11:10:13 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-20 11:10:13 +0000 |
commit | 0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch) | |
tree | 7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /app/presenters | |
parent | 72123183a20411a36d607d70b12d57c484394c8e (diff) | |
download | gitlab-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.rb | 4 | ||||
-rw-r--r-- | app/presenters/ci/pipeline_presenter.rb | 3 | ||||
-rw-r--r-- | app/presenters/merge_request_presenter.rb | 14 | ||||
-rw-r--r-- | app/presenters/packages/pypi/package_presenter.rb | 96 | ||||
-rw-r--r-- | app/presenters/packages/pypi/simple_index_presenter.rb | 50 | ||||
-rw-r--r-- | app/presenters/packages/pypi/simple_package_versions_presenter.rb | 58 | ||||
-rw-r--r-- | app/presenters/packages/pypi/simple_presenter_base.rb | 53 | ||||
-rw-r--r-- | app/presenters/project_presenter.rb | 17 | ||||
-rw-r--r-- | app/presenters/projects/security/configuration_presenter.rb | 3 | ||||
-rw-r--r-- | app/presenters/projects/settings/deploy_keys_presenter.rb | 2 | ||||
-rw-r--r-- | app/presenters/releases/link_presenter.rb | 12 | ||||
-rw-r--r-- | app/presenters/service_hook_presenter.rb | 4 | ||||
-rw-r--r-- | app/presenters/snippet_blob_presenter.rb | 2 |
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 |