Skip to content
Snippets Groups Projects
Commit 0e0c760e authored by Douwe Maan's avatar Douwe Maan
Browse files

Refactor overriding max size

parent a7fd95cd
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -35,6 +35,8 @@ class Projects::BlobController < Projects::ApplicationController
end
 
def show
@blob.override_max_size! if params[:override_max_size] == 'true'
respond_to do |format|
format.html do
environment_params = @repository.branch_exists?(@ref) ? { ref: @ref } : { commit: @commit }
Loading
Loading
Loading
Loading
@@ -219,7 +219,13 @@ module BlobHelper
def blob_render_error_reason(viewer, error)
case error
when :too_large
"it is larger than #{number_to_human_size(viewer.relevant_max_size)}"
max_size =
if viewer.absolutely_too_large?
viewer.absolute_max_size
elsif viewer.too_large?
viewer.max_size
end
"it is larger than #{number_to_human_size(max_size)}"
when :server_side_but_stored_in_lfs
"it is stored in LFS"
end
Loading
Loading
@@ -232,7 +238,7 @@ module BlobHelper
options << link_to('load it anyway', url_for(params.merge(viewer: viewer.type, override_max_size: true, format: nil)))
end
 
if viewer.rich? && viewer.blob.rendered_as_text?(override_max_size: true)
if viewer.rich? && viewer.blob.rendered_as_text?
options << link_to('view the source', '#', class: 'js-blob-viewer-switch-btn', data: { viewer: 'simple' })
end
 
Loading
Loading
Loading
Loading
@@ -122,12 +122,17 @@ class Blob < SimpleDelegator
@rich_viewer ||= rich_viewer_class&.new(self)
end
 
def rendered_as_text?(override_max_size: false)
simple_viewer.is_a?(BlobViewer::Text) && !simple_viewer.render_error(override_max_size: override_max_size)
def rendered_as_text?(ignore_errors: true)
simple_viewer.is_a?(BlobViewer::Text) && (ignore_errors || simple_viewer.render_error.nil?)
end
 
def show_viewer_switcher?
simple_viewer.is_a?(BlobViewer::Text) && rich_viewer
rendered_as_text? && rich_viewer
end
def override_max_size!
simple_viewer&.override_max_size = true
rich_viewer&.override_max_size = true
end
 
private
Loading
Loading
Loading
Loading
@@ -5,6 +5,7 @@ module BlobViewer
delegate :partial_path, :rich?, :simple?, :client_side?, :server_side?, :text_based?, to: :class
 
attr_reader :blob
attr_accessor :override_max_size
 
def initialize(blob)
@blob = blob
Loading
Loading
@@ -38,20 +39,20 @@ module BlobViewer
!extensions || extensions.include?(blob.extension)
end
 
def can_override_max_size?
too_large? && !too_large?(override_max_size: true)
def too_large?
blob.raw_size > max_size
end
 
def relevant_max_size
if too_large?(override_max_size: true)
absolute_max_size
elsif too_large?
max_size
end
def absolutely_too_large?
blob.raw_size > absolute_max_size
end
def can_override_max_size?
too_large? && !absolutely_too_large?
end
 
def render_error(override_max_size: false)
if too_large?(override_max_size: override_max_size)
def render_error
if override_max_size ? absolutely_too_large? : too_large?
:too_large
elsif server_side_but_stored_in_lfs?
:server_side_but_stored_in_lfs
Loading
Loading
@@ -66,14 +67,6 @@ module BlobViewer
 
private
 
def too_large?(override_max_size: false)
if override_max_size
blob.raw_size > absolute_max_size
else
blob.raw_size > max_size
end
end
def server_side_but_stored_in_lfs?
server_side? && blob.valid_lfs_pointer?
end
Loading
Loading
Loading
Loading
@@ -9,7 +9,7 @@ module BlobViewer
self.partial_name = 'download'
self.text_based = false
 
def render_error(*)
def render_error
nil
end
end
Loading
Loading
Loading
Loading
@@ -15,7 +15,7 @@
= render 'projects/blob/viewer_switcher', blob: blob unless blame
 
.btn-group{ role: "group" }<
= copy_blob_source_button(blob) if !blame && blob.rendered_as_text?(override_max_size: params[:override_max_size])
= copy_blob_source_button(blob) if !blame && blob.rendered_as_text?(ignore_errors: false)
= open_raw_file_button(namespace_project_raw_path(@project.namespace, @project, @id))
= view_on_environment_button(@commit.sha, @path, @environment) if @environment
 
Loading
Loading
- hidden = local_assigns.fetch(:hidden, false)
- render_error = viewer.render_error(override_max_size: params[:override_max_size])
- render_error = viewer.render_error
- load_asynchronously = local_assigns.fetch(:load_asynchronously, viewer.server_side?) && render_error.nil?
 
- url = url_for(params.merge(viewer: viewer.type, format: :json)) if load_asynchronously
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment