Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/award_emoji_presenter.rb10
-rw-r--r--app/presenters/blob_presenter.rb33
-rw-r--r--app/presenters/ci/build_runner_presenter.rb6
-rw-r--r--app/presenters/packages/npm/package_presenter.rb38
-rw-r--r--app/presenters/project_presenter.rb38
-rw-r--r--app/presenters/release_presenter.rb4
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)