diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
commit | 311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch) | |
tree | 07e7870bca8aed6d61fdcc810731c50d2c40af47 /app/presenters | |
parent | 27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff) | |
download | gitlab-ce-311b0269b4eb9839fa63f80c8d7a58f32b8138a0.tar.gz |
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'app/presenters')
-rw-r--r-- | app/presenters/award_emoji_presenter.rb | 10 | ||||
-rw-r--r-- | app/presenters/blob_presenter.rb | 33 | ||||
-rw-r--r-- | app/presenters/ci/build_runner_presenter.rb | 6 | ||||
-rw-r--r-- | app/presenters/packages/npm/package_presenter.rb | 38 | ||||
-rw-r--r-- | app/presenters/project_presenter.rb | 38 | ||||
-rw-r--r-- | app/presenters/release_presenter.rb | 4 |
6 files changed, 82 insertions, 47 deletions
diff --git a/app/presenters/award_emoji_presenter.rb b/app/presenters/award_emoji_presenter.rb index 8a7b58e0aba..9a1c8d6934d 100644 --- a/app/presenters/award_emoji_presenter.rb +++ b/app/presenters/award_emoji_presenter.rb @@ -4,24 +4,24 @@ class AwardEmojiPresenter < Gitlab::View::Presenter::Delegated presents ::AwardEmoji, as: :award_emoji def description - as_emoji['description'] + as_emoji&.description end def unicode - as_emoji['unicode'] + as_emoji&.hex end def emoji - as_emoji['moji'] + as_emoji&.codepoints end def unicode_version - Gitlab::Emoji.emoji_unicode_version(award_emoji.name) + as_emoji&.unicode_version end private def as_emoji - @emoji ||= Gitlab::Emoji.emojis[award_emoji.name] || {} + @emoji ||= TanukiEmoji.find_by_alpha_code(award_emoji.name) end end diff --git a/app/presenters/blob_presenter.rb b/app/presenters/blob_presenter.rb index c198859aa4c..5835a77d0b9 100644 --- a/app/presenters/blob_presenter.rb +++ b/app/presenters/blob_presenter.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true +require 'ipynbdiff' class BlobPresenter < Gitlab::View::Presenter::Delegated include ApplicationHelper @@ -20,6 +21,17 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated ) end + def highlight_transformed(plain: nil) + load_all_blob_data + + Gitlab::Highlight.highlight( + blob.path, + transformed_blob_data, + language: transformed_blob_language, + plain: plain + ) + end + def plain_data return if blob.binary? @@ -50,6 +62,10 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated url_helpers.project_create_blob_path(project, ref_qualified_path) end + def pipeline_editor_path + 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 + def fork_and_edit_path fork_path_for_current_user(project, edit_blob_path) end @@ -107,4 +123,21 @@ 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 diff --git a/app/presenters/ci/build_runner_presenter.rb b/app/presenters/ci/build_runner_presenter.rb index b0066e2d7f0..8e1b675d051 100644 --- a/app/presenters/ci/build_runner_presenter.rb +++ b/app/presenters/ci/build_runner_presenter.rb @@ -33,11 +33,7 @@ module Ci end def runner_variables - if Feature.enabled?(:variable_inside_variable, project, default_enabled: :yaml) - variables.sort_and_expand_all(project, keep_undefined: true).to_runner_variables - else - variables.to_runner_variables - end + variables.sort_and_expand_all(keep_undefined: true).to_runner_variables end def refspecs diff --git a/app/presenters/packages/npm/package_presenter.rb b/app/presenters/packages/npm/package_presenter.rb index b9595eb6647..9e3308c2573 100644 --- a/app/presenters/packages/npm/package_presenter.rb +++ b/app/presenters/packages/npm/package_presenter.rb @@ -5,26 +5,37 @@ module Packages class PackagePresenter include API::Helpers::RelatedResourcesHelpers + # Allowed fields are those defined in the abbreviated form + # defined here: https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object + # except: name, version, dist, dependencies and xDependencies. Those are generated by this presenter. + PACKAGE_JSON_ALLOWED_FIELDS = %w[deprecated bin directories dist engines _hasShrinkwrap].freeze + attr_reader :name, :packages - def initialize(name, packages) + def initialize(name, packages, include_metadata: false) @name = name @packages = packages + @include_metadata = include_metadata end def versions package_versions = {} packages.each_batch do |relation| - relation.including_dependency_links - .preload_files - .each do |package| - package_file = package.package_files.last + batched_packages = relation.including_dependency_links + .preload_files + + if @include_metadata + batched_packages = batched_packages.preload_npm_metadatum + end + + batched_packages.each do |package| + package_file = package.package_files.last - next unless package_file + next unless package_file - package_versions[package.version] = build_package_version(package, package_file) - end + package_versions[package.version] = build_package_version(package, package_file) + end end package_versions @@ -41,14 +52,14 @@ module Packages end def build_package_version(package, package_file) - { + abbreviated_package_json(package).merge( name: package.name, version: package.version, dist: { shasum: package_file.file_sha1, tarball: tarball_url(package, package_file) } - }.tap do |package_version| + ).tap do |package_version| package_version.merge!(build_package_dependencies(package)) end end @@ -79,6 +90,13 @@ module Packages Packages::Tag.for_packages(packages) .preload_package end + + def abbreviated_package_json(package) + return {} unless @include_metadata + + json = package.npm_metadatum&.package_json || {} + json.slice(*PACKAGE_JSON_ALLOWED_FIELDS) + end end end end diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb index bbd8c715f5c..ec66f9bdd4f 100644 --- a/app/presenters/project_presenter.rb +++ b/app/presenters/project_presenter.rb @@ -249,33 +249,23 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated strong_memoize(:upload_anchor_data) do next unless can_current_user_push_to_default_branch? - experiment(:empty_repo_upload, project: project) do |e| - e.use {} - e.try do - AnchorData.new(false, - statistic_icon('upload') + _('Upload file'), - '#modal-upload-blob', - 'js-upload-file-experiment-trigger', - nil, - nil, - { - 'target_branch' => default_branch_or_main, - 'original_branch' => default_branch_or_main, - 'can_push_code' => 'true', - 'path' => project_create_blob_path(project, default_branch_or_main), - 'project_path' => project.full_path - } - ) - end - e.run - end + AnchorData.new(false, + statistic_icon('upload') + _('Upload file'), + '#modal-upload-blob', + 'js-upload-file-trigger', + nil, + nil, + { + 'target_branch' => default_branch_or_main, + 'original_branch' => default_branch_or_main, + 'can_push_code' => 'true', + 'path' => project_create_blob_path(project, default_branch_or_main), + 'project_path' => project.full_path + } + ) end end - def empty_repo_upload_experiment? - upload_anchor_data.present? - end - def new_file_anchor_data if can_current_user_push_to_default_branch? new_file_path = empty_repo? ? ide_edit_path(project, default_branch_or_main) : project_new_blob_path(project, default_branch_or_main) diff --git a/app/presenters/release_presenter.rb b/app/presenters/release_presenter.rb index c919c7f4c60..dac42af38bf 100644 --- a/app/presenters/release_presenter.rb +++ b/app/presenters/release_presenter.rb @@ -22,8 +22,6 @@ class ReleasePresenter < Gitlab::View::Presenter::Delegated end def self_url - return unless can_download_code? - project_release_url(project, release) end @@ -64,7 +62,7 @@ class ReleasePresenter < Gitlab::View::Presenter::Delegated delegator_override :name def name - can_download_code? ? release.name : "Release-#{release.id}" + release.name end def download_url(filepath) |