Refactor code for single file download in repository

This commit is contained in:
Kia Mei Somabes 2018-07-13 09:24:11 +08:00
parent 9f57ae11e9
commit 1e0f0de302
5 changed files with 17 additions and 18 deletions

View File

@ -18,7 +18,7 @@ class Projects::RawController < Projects::ApplicationController
if @blob.stored_externally?
send_lfs_object
else
send_git_blob @repository, @blob, params[:inline]
send_git_blob @repository, @blob, inline: (params[:inline] != 'false')
end
else
render_404

View File

@ -114,22 +114,22 @@ module BlobHelper
icon("#{file_type_icon_class('file', mode, name)} fw")
end
def blob_raw_url(only_path: false, inline: nil)
def blob_raw_url(**kwargs)
if @build && @entry
raw_project_job_artifacts_url(@project, @build, path: @entry.path, only_path: only_path)
raw_project_job_artifacts_url(@project, @build, path: @entry.path, **kwargs)
elsif @snippet
if @snippet.project_id
raw_project_snippet_url(@project, @snippet, only_path: only_path)
raw_project_snippet_url(@project, @snippet, **kwargs)
else
raw_snippet_url(@snippet, only_path: only_path)
raw_snippet_url(@snippet, **kwargs)
end
elsif @blob
project_raw_url(@project, @id, only_path: only_path, inline: inline)
project_raw_url(@project, @id, **kwargs)
end
end
def blob_raw_path
blob_raw_url(only_path: true)
def blob_raw_path(**kwargs)
blob_raw_url(**kwargs, only_path: true)
end
# SVGs can contain malicious JavaScript; only include whitelisted
@ -226,16 +226,15 @@ module BlobHelper
def open_raw_blob_button(blob)
return if blob.empty?
unless blob.raw_binary? || blob.stored_externally?
title = 'Open raw'
link_to icon('file-code-o'), blob_raw_url(:inline => true), class: 'btn btn-sm has-tooltip', target: '_blank', rel: 'noopener noreferrer', title: title, data: { container: 'body' }
end
return if blob.raw_binary? || blob.stored_externally?
title = 'Open raw'
link_to icon('file-code-o'), blob_raw_path, class: 'btn btn-sm has-tooltip', target: '_blank', rel: 'noopener noreferrer', title: title, data: { container: 'body' }
end
def download_blob_button(blob)
return if blob.empty?
title = 'Download'
link_to sprite_icon('download'), blob_raw_url, download: @path, class: 'btn btn-sm has-tooltip', target: '_blank', rel: 'noopener noreferrer', title: title, data: { container: 'body' }
link_to sprite_icon('download'), blob_raw_path(inline: false), download: @path, class: 'btn btn-sm has-tooltip', target: '_blank', rel: 'noopener noreferrer', title: title, data: { container: 'body' }
end
def blob_render_error_reason(viewer)

View File

@ -2,9 +2,9 @@
# Workhorse will also serve files when using `send_file`.
module WorkhorseHelper
# Send a Git blob through Workhorse
def send_git_blob(repository, blob, inline)
def send_git_blob(repository, blob, inline: true)
headers.store(*Gitlab::Workhorse.send_git_blob(repository, blob))
inline ? (headers['Content-Disposition'] = 'inline') : (headers['Content-Disposition'] = 'attachment')
headers['Content-Disposition'] = inline ? 'inline' : 'attachment'
headers['Content-Type'] = safe_content_type(blob)
render plain: ""
end

View File

@ -27,6 +27,6 @@
.btn-group{ role: "group" }<
= copy_blob_source_button(blob)
= open_raw_blob_button(blob)
= download_blob_button(blob)
= render 'projects/blob/content', blob: blob

View File

@ -1,5 +1,5 @@
---
title: Add download button for single file (including raw files) in repository
merge_request:
author:
merge_request: 20480
author: Kia Mei Somabes
type: added