From 0a081e7eff9730beebd4bea1eb40873d907b6293 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Thu, 3 Dec 2015 14:59:10 +0100 Subject: If a user clicks on the LFS object, it should be served if the user has access to the object. --- app/controllers/projects/blob_controller.rb | 17 +++++++++++++++++ app/models/lfs_object.rb | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 31a33bfd237..d0108c823a9 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -17,6 +17,7 @@ class Projects::BlobController < Projects::ApplicationController before_action :require_branch_head, only: [:edit, :update] before_action :editor_variables, except: [:show, :preview, :diff] before_action :after_edit_path, only: [:edit, :update] + before_action :show_lfs_object, only: :show def new commit unless @repository.empty? @@ -193,4 +194,20 @@ class Projects::BlobController < Projects::ApplicationController file_content_encoding: params[:encoding] } end + + def show_lfs_object + return unless @blob && @blob.text? && @blob.data.present? + + if @blob.data.starts_with?("version https://git-lfs.github.com/spec") + oid = @blob.data.match(/#{LfsObject::MATCH_FROM_POINTER_REGEX}/) + if oid && oid[1] + lfs_object = LfsObject.find_by_oid(oid[1]) + return nil unless lfs_object && lfs_object.file.exists? + + if lfs_object.projects.exists?(lfs_object.storage_project(@project).id) + send_file lfs_object.file.path, filename: @blob.name, disposition: 'attachment' + end + end + end + end end diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb index 3c1426f59d0..f087d07b5b2 100644 --- a/app/models/lfs_object.rb +++ b/app/models/lfs_object.rb @@ -5,4 +5,14 @@ class LfsObject < ActiveRecord::Base validates :oid, presence: true, uniqueness: true mount_uploader :file, LfsObjectUploader + + MATCH_FROM_POINTER_REGEX = "(?<=sha256:)([0-9a-f]{64})" + + def storage_project(project) + if project && project.forked? + project.forked_from_project + else + project + end + end end -- cgit v1.2.1 From ea52a81da4888af232e9868d722cc91d5e442723 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Thu, 3 Dec 2015 17:08:09 +0100 Subject: Move the file serving to Raw controller, add a few ifs to view. --- app/controllers/projects/blob_controller.rb | 17 ---------------- app/controllers/projects/raw_controller.rb | 31 ++++++++++++++++++++++------- app/views/projects/blob/_actions.html.haml | 6 +++--- app/views/projects/blob/_blob.html.haml | 6 ++++-- app/views/projects/blob/_download.html.haml | 6 +++++- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index d0108c823a9..31a33bfd237 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -17,7 +17,6 @@ class Projects::BlobController < Projects::ApplicationController before_action :require_branch_head, only: [:edit, :update] before_action :editor_variables, except: [:show, :preview, :diff] before_action :after_edit_path, only: [:edit, :update] - before_action :show_lfs_object, only: :show def new commit unless @repository.empty? @@ -194,20 +193,4 @@ class Projects::BlobController < Projects::ApplicationController file_content_encoding: params[:encoding] } end - - def show_lfs_object - return unless @blob && @blob.text? && @blob.data.present? - - if @blob.data.starts_with?("version https://git-lfs.github.com/spec") - oid = @blob.data.match(/#{LfsObject::MATCH_FROM_POINTER_REGEX}/) - if oid && oid[1] - lfs_object = LfsObject.find_by_oid(oid[1]) - return nil unless lfs_object && lfs_object.file.exists? - - if lfs_object.projects.exists?(lfs_object.storage_project(@project).id) - send_file lfs_object.file.path, filename: @blob.name, disposition: 'attachment' - end - end - end - end end diff --git a/app/controllers/projects/raw_controller.rb b/app/controllers/projects/raw_controller.rb index d5ee6ac8663..c56f432a1f1 100644 --- a/app/controllers/projects/raw_controller.rb +++ b/app/controllers/projects/raw_controller.rb @@ -10,15 +10,13 @@ class Projects::RawController < Projects::ApplicationController @blob = @repository.blob_at(@commit.id, @path) if @blob - type = get_blob_type - headers['X-Content-Type-Options'] = 'nosniff' - send_data( - @blob.data, - type: type, - disposition: 'inline' - ) + if @blob.lfs_pointer? + send_lfs_object + else + stream_data + end else render_404 end @@ -35,4 +33,23 @@ class Projects::RawController < Projects::ApplicationController 'application/octet-stream' end end + + def stream_data + type = get_blob_type + + send_data( + @blob.data, + type: type, + disposition: 'inline' + ) + end + + def send_lfs_object + lfs_object = LfsObject.find_by_oid(@blob.lfs_oid) + return nil unless lfs_object && lfs_object.file.exists? + + if lfs_object.projects.exists?(lfs_object.storage_project(@project).id) + send_file lfs_object.file.path, filename: @blob.name, disposition: 'attachment' + end + end end diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml index ba3e0c3c590..15cd8f056f5 100644 --- a/app/views/projects/blob/_actions.html.haml +++ b/app/views/projects/blob/_actions.html.haml @@ -1,9 +1,9 @@ .btn-group.tree-btn-group - = edit_blob_link(@project, @ref, @path) + = edit_blob_link(@project, @ref, @path) unless @blob.lfs_pointer? = link_to 'Raw', namespace_project_raw_path(@project.namespace, @project, @id), class: 'btn btn-sm', target: '_blank' -# only show normal/blame view links for text files - - if @blob.text? + - if @blob.text? && !@blob.lfs_pointer? - if current_page? namespace_project_blame_path(@project.namespace, @project, @id) = link_to 'Normal View', namespace_project_blob_path(@project.namespace, @project, @id), class: 'btn btn-sm' @@ -16,7 +16,7 @@ = link_to 'Permalink', namespace_project_blob_path(@project.namespace, @project, tree_join(@commit.sha, @path)), class: 'btn btn-sm' -- if allowed_tree_edit? +- if allowed_tree_edit? && !@blob.lfs_pointer? .btn-group{ role: "group" } %button.btn.btn-default{ 'data-target' => '#modal-upload-blob', 'data-toggle' => 'modal' } Replace %button.btn.btn-remove{ 'data-target' => '#modal-remove-blob', 'data-toggle' => 'modal' } Delete diff --git a/app/views/projects/blob/_blob.html.haml b/app/views/projects/blob/_blob.html.haml index 42f632b38ef..bb9e1c63413 100644 --- a/app/views/projects/blob/_blob.html.haml +++ b/app/views/projects/blob/_blob.html.haml @@ -29,10 +29,12 @@ %strong = blob.name %small - = number_to_human_size(blob.size) + = number_to_human_size(blob.size) unless blob.lfs_pointer? .file-actions.hidden-xs = render "actions" - - if blob.text? + - if blob.lfs_pointer? + = render "download", blob: blob + - elsif blob.text? = render "text", blob: blob - elsif blob.image? = render "image", blob: blob diff --git a/app/views/projects/blob/_download.html.haml b/app/views/projects/blob/_download.html.haml index f2c5e95ecf4..39ec6f693e2 100644 --- a/app/views/projects/blob/_download.html.haml +++ b/app/views/projects/blob/_download.html.haml @@ -4,4 +4,8 @@ %h1.light %i.fa.fa-download %h4 - Download (#{number_to_human_size blob.size}) + - if blob.lfs_pointer? + - size = blob.lfs_size + - else + - size = blob.size + Download (#{number_to_human_size size}) -- cgit v1.2.1 From b9a0f96d42f52dfdad57ac8a2a5056a9262e6a88 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 4 Dec 2015 12:01:08 +0100 Subject: Don't show diffs for lfs pointers. --- app/models/lfs_object.rb | 2 -- app/views/projects/diffs/_file.html.haml | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb index f087d07b5b2..43b845b29c6 100644 --- a/app/models/lfs_object.rb +++ b/app/models/lfs_object.rb @@ -6,8 +6,6 @@ class LfsObject < ActiveRecord::Base mount_uploader :file, LfsObjectUploader - MATCH_FROM_POINTER_REGEX = "(?<=sha256:)([0-9a-f]{64})" - def storage_project(project) if project && project.forked? project.forked_from_project diff --git a/app/views/projects/diffs/_file.html.haml b/app/views/projects/diffs/_file.html.haml index b3392d00e01..ec1c665716e 100644 --- a/app/views/projects/diffs/_file.html.haml +++ b/app/views/projects/diffs/_file.html.haml @@ -25,7 +25,7 @@ = "#{diff_file.diff.a_mode} → #{diff_file.diff.b_mode}" .diff-controls - - if blob.text? + - if blob.text? && !blob.lfs_pointer? = link_to '#', class: 'js-toggle-diff-comments btn btn-sm active has_tooltip', title: "Toggle comments for this file" do %i.fa.fa-comments   @@ -40,7 +40,7 @@ .diff-content.diff-wrap-lines -# Skipp all non non-supported blobs - return unless blob.respond_to?('text?') - - if blob.text? + - if blob.text? && !blob.lfs_pointer? - if diff_view == 'parallel' = render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob, index: i - else -- cgit v1.2.1 From b2c4675cb0e681027334e5bd046451d3116924c8 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 4 Dec 2015 12:32:13 +0100 Subject: Recursivity needed if a fork is a fork of a fork. --- app/models/lfs_object.rb | 2 +- lib/gitlab/lfs/response.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb index 43b845b29c6..a243c7b77cc 100644 --- a/app/models/lfs_object.rb +++ b/app/models/lfs_object.rb @@ -8,7 +8,7 @@ class LfsObject < ActiveRecord::Base def storage_project(project) if project && project.forked? - project.forked_from_project + storage_project(project.forked_from_project) else project end diff --git a/lib/gitlab/lfs/response.rb b/lib/gitlab/lfs/response.rb index 9be9a65671b..9d9617761b3 100644 --- a/lib/gitlab/lfs/response.rb +++ b/lib/gitlab/lfs/response.rb @@ -220,7 +220,7 @@ module Gitlab def storage_project(project) if project.forked? - project.forked_from_project + storage_project(project.forked_from_project) else project end -- cgit v1.2.1 From e53b350cb6db7438c1a50c500b324fd87afc41c4 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 7 Dec 2015 15:03:50 +0100 Subject: Add specs for showing lfs object in UI. --- app/controllers/projects/raw_controller.rb | 24 ++++++++++++------ app/helpers/blob_helper.rb | 14 ++++++++++- app/helpers/tree_helper.rb | 4 +++ app/models/lfs_object.rb | 4 +++ app/views/projects/blob/_actions.html.haml | 6 ++--- app/views/projects/blob/_blob.html.haml | 2 +- app/views/projects/blob/_download.html.haml | 6 +---- app/views/projects/blob/show.html.haml | 2 +- app/views/projects/diffs/_file.html.haml | 4 +-- features/project/source/browse_files.feature | 6 +++++ features/steps/project/source/browse_files.rb | 26 +++++++++++++++++++ spec/controllers/projects/raw_controller_spec.rb | 32 ++++++++++++++++++++++++ spec/support/test_env.rb | 2 +- 13 files changed, 111 insertions(+), 21 deletions(-) diff --git a/app/controllers/projects/raw_controller.rb b/app/controllers/projects/raw_controller.rb index c56f432a1f1..be7d5c187fe 100644 --- a/app/controllers/projects/raw_controller.rb +++ b/app/controllers/projects/raw_controller.rb @@ -38,18 +38,28 @@ class Projects::RawController < Projects::ApplicationController type = get_blob_type send_data( - @blob.data, - type: type, - disposition: 'inline' - ) + @blob.data, + type: type, + disposition: 'inline' + ) end def send_lfs_object - lfs_object = LfsObject.find_by_oid(@blob.lfs_oid) - return nil unless lfs_object && lfs_object.file.exists? + lfs_object = find_lfs_object - if lfs_object.projects.exists?(lfs_object.storage_project(@project).id) + if lfs_object && lfs_object.project_allowed_access?(@project) send_file lfs_object.file.path, filename: @blob.name, disposition: 'attachment' + else + render_404 + end + end + + def find_lfs_object + lfs_object = LfsObject.find_by_oid(@blob.lfs_oid) + if lfs_object && lfs_object.file.exists? + lfs_object + else + nil end end end diff --git a/app/helpers/blob_helper.rb b/app/helpers/blob_helper.rb index df5f5fae23c..fa1b2522051 100644 --- a/app/helpers/blob_helper.rb +++ b/app/helpers/blob_helper.rb @@ -30,7 +30,7 @@ module BlobHelper nil end - if blob && blob.text? + if blob && blob.text? && !blob.lfs_pointer? text = 'Edit' after = options[:after] || '' from_mr = options[:from_merge_request_id] @@ -71,4 +71,16 @@ module BlobHelper def blob_icon(mode, name) icon("#{file_type_icon_class('file', mode, name)} fw") end + + def viewable?(blob) + blob.text? && !blob.lfs_pointer? + end + + def blob_size(blob) + if blob.lfs_pointer? + blob.lfs_size + else + blob.size + end + end end diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index 03a49e119b8..6afa1aacc5b 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -54,6 +54,10 @@ module TreeHelper ::Gitlab::GitAccess.new(current_user, project).can_push_to_branch?(ref) end + def can_delete_or_replace?(blob) + allowed_tree_edit? && !blob.lfs_pointer? + end + def tree_breadcrumbs(tree, max_links = 2) if @path.present? part_path = "" diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb index a243c7b77cc..18657c3e1c8 100644 --- a/app/models/lfs_object.rb +++ b/app/models/lfs_object.rb @@ -13,4 +13,8 @@ class LfsObject < ActiveRecord::Base project end end + + def project_allowed_access?(project) + projects.exists?(storage_project(project).id) + end end diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml index 15cd8f056f5..c31f6442f12 100644 --- a/app/views/projects/blob/_actions.html.haml +++ b/app/views/projects/blob/_actions.html.haml @@ -1,9 +1,9 @@ .btn-group.tree-btn-group - = edit_blob_link(@project, @ref, @path) unless @blob.lfs_pointer? + = edit_blob_link(@project, @ref, @path) = link_to 'Raw', namespace_project_raw_path(@project.namespace, @project, @id), class: 'btn btn-sm', target: '_blank' -# only show normal/blame view links for text files - - if @blob.text? && !@blob.lfs_pointer? + - if viewable?(@blob) - if current_page? namespace_project_blame_path(@project.namespace, @project, @id) = link_to 'Normal View', namespace_project_blob_path(@project.namespace, @project, @id), class: 'btn btn-sm' @@ -16,7 +16,7 @@ = link_to 'Permalink', namespace_project_blob_path(@project.namespace, @project, tree_join(@commit.sha, @path)), class: 'btn btn-sm' -- if allowed_tree_edit? && !@blob.lfs_pointer? +- if can_delete_or_replace?(@blob) .btn-group{ role: "group" } %button.btn.btn-default{ 'data-target' => '#modal-upload-blob', 'data-toggle' => 'modal' } Replace %button.btn.btn-remove{ 'data-target' => '#modal-remove-blob', 'data-toggle' => 'modal' } Delete diff --git a/app/views/projects/blob/_blob.html.haml b/app/views/projects/blob/_blob.html.haml index bb9e1c63413..2a3315da3db 100644 --- a/app/views/projects/blob/_blob.html.haml +++ b/app/views/projects/blob/_blob.html.haml @@ -29,7 +29,7 @@ %strong = blob.name %small - = number_to_human_size(blob.size) unless blob.lfs_pointer? + = number_to_human_size(blob_size(blob)) .file-actions.hidden-xs = render "actions" - if blob.lfs_pointer? diff --git a/app/views/projects/blob/_download.html.haml b/app/views/projects/blob/_download.html.haml index 39ec6f693e2..7908fcae3de 100644 --- a/app/views/projects/blob/_download.html.haml +++ b/app/views/projects/blob/_download.html.haml @@ -4,8 +4,4 @@ %h1.light %i.fa.fa-download %h4 - - if blob.lfs_pointer? - - size = blob.lfs_size - - else - - size = blob.size - Download (#{number_to_human_size size}) + Download (#{number_to_human_size blob_size(blob)}) diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml index b7276868ce6..09d6fc18e3e 100644 --- a/app/views/projects/blob/show.html.haml +++ b/app/views/projects/blob/show.html.haml @@ -6,7 +6,7 @@ %div#tree-holder.tree-holder = render 'blob', blob: @blob -- if allowed_tree_edit? +- if can_delete_or_replace?(@blob) = render 'projects/blob/remove' - title = "Replace #{@blob.name}" diff --git a/app/views/projects/diffs/_file.html.haml b/app/views/projects/diffs/_file.html.haml index ec1c665716e..f6ba64d31b5 100644 --- a/app/views/projects/diffs/_file.html.haml +++ b/app/views/projects/diffs/_file.html.haml @@ -25,7 +25,7 @@ = "#{diff_file.diff.a_mode} → #{diff_file.diff.b_mode}" .diff-controls - - if blob.text? && !blob.lfs_pointer? + - if viewable?(blob) = link_to '#', class: 'js-toggle-diff-comments btn btn-sm active has_tooltip', title: "Toggle comments for this file" do %i.fa.fa-comments   @@ -40,7 +40,7 @@ .diff-content.diff-wrap-lines -# Skipp all non non-supported blobs - return unless blob.respond_to?('text?') - - if blob.text? && !blob.lfs_pointer? + - if viewable?(blob) - if diff_view == 'parallel' = render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob, index: i - else diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature index e545ea63ca8..37f99b37619 100644 --- a/features/project/source/browse_files.feature +++ b/features/project/source/browse_files.feature @@ -221,3 +221,9 @@ Feature: Project Source Browse Files Given I switch ref to fix And I visit the fix tree Then I see the commit data for a directory with a leading dot + + Scenario: I browse LFS object + Given I click on "files/lfs/lfs_object.iso" file in repo + Then I should see download link and object size + And I should not see lfs pointer details + And I should see buttons for allowed commands diff --git a/features/steps/project/source/browse_files.rb b/features/steps/project/source/browse_files.rb index ceab23b9a4d..2edbca9b7fe 100644 --- a/features/steps/project/source/browse_files.rb +++ b/features/steps/project/source/browse_files.rb @@ -305,6 +305,32 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps expect(page).not_to have_content('Loading commit data...') end + step 'I click on "files/lfs/lfs_object.iso" file in repo' do + click_link 'files' + click_link "lfs" + click_link "lfs_object.iso" + end + + step 'I should see download link and object size' do + expect(page).to have_content 'Download (1.5 MB)' + end + + step 'I should not see lfs pointer details' do + expect(page).not_to have_content 'version https://git-lfs.github.com/spec/v1' + expect(page).not_to have_content 'oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897' + expect(page).not_to have_content 'size 1575078' + end + + step 'I should see buttons for allowed commands' do + expect(page).to have_content 'Raw' + expect(page).to have_content 'History' + expect(page).to have_content 'Permalink' + expect(page).not_to have_content 'Edit' + expect(page).not_to have_content 'Blame' + expect(page).not_to have_content 'Delete' + expect(page).not_to have_content 'Replace' + end + private def set_new_content diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb index c114f342021..2329c246daa 100644 --- a/spec/controllers/projects/raw_controller_spec.rb +++ b/spec/controllers/projects/raw_controller_spec.rb @@ -33,5 +33,37 @@ describe Projects::RawController do expect(response.header['Content-Type']).to eq('image/jpeg') end end + + context 'lfs object' do + let(:id) { 'master/files/lfs/lfs_object.iso' } + let!(:lfs_object) { create(:lfs_object, oid: '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', size: '1575078') } + + context 'when project has access' do + before do + public_project.lfs_objects << lfs_object + end + + it 'serves the file' do + get(:show, + namespace_id: public_project.namespace.to_param, + project_id: public_project.to_param, + id: id) + + expect(response.status).to eq(200) + expect(response.header['Content-Type']).to eq('application/octet-stream') + end + end + + context 'when project does not have access' do + it 'does not serve the file' do + get(:show, + namespace_id: public_project.namespace.to_param, + project_id: public_project.to_param, + id: id) + + expect(response.status).to eq(404) + end + end + end end end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 787670e9297..47c67475cd0 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -12,7 +12,7 @@ module TestEnv 'fix' => '48f0be4', 'improve/awesome' => '5937ac0', 'markdown' => '0ed8c6c', - 'master' => '5937ac0', + 'master' => 'be93687', "'test'" => 'e56497b', } -- cgit v1.2.1 From bf17609e2a4cc062a9bccd67e90dd6524f0389b2 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 7 Dec 2015 15:56:38 +0100 Subject: Rename blob helper, bump version of gitlab_git to 7.2.21. --- Gemfile.lock | 2 +- app/helpers/blob_helper.rb | 6 +++--- app/views/projects/blob/_actions.html.haml | 2 +- app/views/projects/diffs/_file.html.haml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index cd1855758b2..e2fc414824e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -298,7 +298,7 @@ GEM posix-spawn (~> 0.3) gitlab_emoji (0.2.0) gemojione (~> 2.1) - gitlab_git (7.2.20) + gitlab_git (7.2.21) activesupport (~> 4.0) charlock_holmes (~> 0.7.3) github-linguist (~> 4.7.0) diff --git a/app/helpers/blob_helper.rb b/app/helpers/blob_helper.rb index fa1b2522051..4a3d971f7c6 100644 --- a/app/helpers/blob_helper.rb +++ b/app/helpers/blob_helper.rb @@ -30,7 +30,7 @@ module BlobHelper nil end - if blob && blob.text? && !blob.lfs_pointer? + if blob_viewable?(blob) text = 'Edit' after = options[:after] || '' from_mr = options[:from_merge_request_id] @@ -72,8 +72,8 @@ module BlobHelper icon("#{file_type_icon_class('file', mode, name)} fw") end - def viewable?(blob) - blob.text? && !blob.lfs_pointer? + def blob_viewable?(blob) + blob && blob.text? && !blob.lfs_pointer? end def blob_size(blob) diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml index c31f6442f12..0e54e59e953 100644 --- a/app/views/projects/blob/_actions.html.haml +++ b/app/views/projects/blob/_actions.html.haml @@ -3,7 +3,7 @@ = link_to 'Raw', namespace_project_raw_path(@project.namespace, @project, @id), class: 'btn btn-sm', target: '_blank' -# only show normal/blame view links for text files - - if viewable?(@blob) + - if blob_viewable?(@blob) - if current_page? namespace_project_blame_path(@project.namespace, @project, @id) = link_to 'Normal View', namespace_project_blob_path(@project.namespace, @project, @id), class: 'btn btn-sm' diff --git a/app/views/projects/diffs/_file.html.haml b/app/views/projects/diffs/_file.html.haml index f6ba64d31b5..a930e9e5595 100644 --- a/app/views/projects/diffs/_file.html.haml +++ b/app/views/projects/diffs/_file.html.haml @@ -25,7 +25,7 @@ = "#{diff_file.diff.a_mode} → #{diff_file.diff.b_mode}" .diff-controls - - if viewable?(blob) + - if blob_viewable?(blob) = link_to '#', class: 'js-toggle-diff-comments btn btn-sm active has_tooltip', title: "Toggle comments for this file" do %i.fa.fa-comments   @@ -40,7 +40,7 @@ .diff-content.diff-wrap-lines -# Skipp all non non-supported blobs - return unless blob.respond_to?('text?') - - if viewable?(blob) + - if blob_viewable?(blob) - if diff_view == 'parallel' = render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob, index: i - else -- cgit v1.2.1 From 9bf51ae47d344c5939f275bb5ae429023456d30e Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 8 Dec 2015 10:58:15 +0100 Subject: Fix specs caused by update of gitlab-test repo. --- features/steps/project/source/browse_files.rb | 1 + spec/controllers/projects/raw_controller_spec.rb | 2 +- spec/support/test_env.rb | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/features/steps/project/source/browse_files.rb b/features/steps/project/source/browse_files.rb index 2edbca9b7fe..02d46e28237 100644 --- a/features/steps/project/source/browse_files.rb +++ b/features/steps/project/source/browse_files.rb @@ -306,6 +306,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps end step 'I click on "files/lfs/lfs_object.iso" file in repo' do + visit namespace_project_tree_path(@project.namespace, @project, "lfs") click_link 'files' click_link "lfs" click_link "lfs_object.iso" diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb index 2329c246daa..cd42a592759 100644 --- a/spec/controllers/projects/raw_controller_spec.rb +++ b/spec/controllers/projects/raw_controller_spec.rb @@ -35,7 +35,7 @@ describe Projects::RawController do end context 'lfs object' do - let(:id) { 'master/files/lfs/lfs_object.iso' } + let(:id) { 'be93687/files/lfs/lfs_object.iso' } let!(:lfs_object) { create(:lfs_object, oid: '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', size: '1575078') } context 'when project has access' do diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 47c67475cd0..985bd141e69 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -12,7 +12,8 @@ module TestEnv 'fix' => '48f0be4', 'improve/awesome' => '5937ac0', 'markdown' => '0ed8c6c', - 'master' => 'be93687', + 'lfs' => 'be93687', + 'master' => '5937ac0', "'test'" => 'e56497b', } -- cgit v1.2.1 From ea5b462a1408f9fcd77dfd2961049057fc8ccad9 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 8 Dec 2015 13:33:12 +0100 Subject: Stub the calls to disk and check what send_file returns. --- spec/controllers/projects/raw_controller_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb index cd42a592759..42c6d4f3f88 100644 --- a/spec/controllers/projects/raw_controller_spec.rb +++ b/spec/controllers/projects/raw_controller_spec.rb @@ -41,16 +41,18 @@ describe Projects::RawController do context 'when project has access' do before do public_project.lfs_objects << lfs_object + allow_any_instance_of(LfsObjectUploader).to receive(:exists?).and_return(true) + allow(controller).to receive(:send_file) { controller.render :nothing => true } end it 'serves the file' do + expect(controller).to receive(:send_file).with("#{Gitlab.config.shared.path}/lfs-objects/91/ef/f75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897", :filename => "lfs_object.iso", :disposition => 'attachment') get(:show, namespace_id: public_project.namespace.to_param, project_id: public_project.to_param, id: id) expect(response.status).to eq(200) - expect(response.header['Content-Type']).to eq('application/octet-stream') end end -- cgit v1.2.1 From f36fe92fcbda02ec130889cc508cab5812fd2b20 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 8 Dec 2015 04:43:17 -0800 Subject: Bump gollum-lib to 4.1.0 and fix dependency mismatch with rouge Closes #3767 --- CHANGELOG | 1 + Gemfile | 2 +- Gemfile.lock | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 604efe51a3a..0eb5e63a1a7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.3.0 (unreleased) + - Bump gollum-lib to 4.1.0 (Stan Hu) - Fix API setting of 'public' attribute to false will make a project private (Stan Hu) - Handle and report SSL errors in Web hook test (Stan Hu) - Fix: Assignee selector is empty when 'Unassigned' is selected (Jose Corcuera) diff --git a/Gemfile b/Gemfile index fc4d565fc84..91ad4b6fb4d 100644 --- a/Gemfile +++ b/Gemfile @@ -52,7 +52,7 @@ gem "gitlab_git", '~> 7.2.20' gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: "omniauth-ldap" # Git Wiki -gem 'gollum-lib', '~> 4.0.2' +gem 'gollum-lib', '~> 4.1.0' # Language detection gem "github-linguist", "~> 4.7.0", require: "linguist" diff --git a/Gemfile.lock b/Gemfile.lock index 5d70788d981..d8858bd1f09 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -329,11 +329,11 @@ GEM activesupport (>= 4.1.0) gollum-grit_adapter (1.0.0) gitlab-grit (~> 2.7, >= 2.7.1) - gollum-lib (4.0.3) + gollum-lib (4.1.0) github-markup (~> 1.3.3) gollum-grit_adapter (~> 1.0) nokogiri (~> 1.6.4) - rouge (~> 1.10.1) + rouge (~> 1.9) sanitize (~> 2.1.0) stringex (~> 2.5.1) gon (6.0.1) @@ -884,7 +884,7 @@ DEPENDENCIES gitlab_git (~> 7.2.20) gitlab_meta (= 7.0) gitlab_omniauth-ldap (~> 1.2.1) - gollum-lib (~> 4.0.2) + gollum-lib (~> 4.1.0) gon (~> 6.0.1) grape (~> 0.13.0) grape-entity (~> 0.4.2) -- cgit v1.2.1 From 6245be083d985df3dd5daebb78ecf300bacff7b6 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Tue, 8 Dec 2015 14:00:15 +0100 Subject: All for you rubocop. --- spec/controllers/projects/raw_controller_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb index 42c6d4f3f88..1caa476d37d 100644 --- a/spec/controllers/projects/raw_controller_spec.rb +++ b/spec/controllers/projects/raw_controller_spec.rb @@ -42,11 +42,11 @@ describe Projects::RawController do before do public_project.lfs_objects << lfs_object allow_any_instance_of(LfsObjectUploader).to receive(:exists?).and_return(true) - allow(controller).to receive(:send_file) { controller.render :nothing => true } + allow(controller).to receive(:send_file) { controller.render nothing: true } end it 'serves the file' do - expect(controller).to receive(:send_file).with("#{Gitlab.config.shared.path}/lfs-objects/91/ef/f75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897", :filename => "lfs_object.iso", :disposition => 'attachment') + expect(controller).to receive(:send_file).with("#{Gitlab.config.shared.path}/lfs-objects/91/ef/f75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897", filename: "lfs_object.iso", disposition: 'attachment') get(:show, namespace_id: public_project.namespace.to_param, project_id: public_project.to_param, -- cgit v1.2.1