From b6b26692ea44cfeab7e8fd64b7df60852850fce2 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Tue, 28 Jun 2016 17:25:32 +0100 Subject: Collapse large diffs by default When rendering a list of diff files, skip those where the diff is over 10 KB and provide an endpoint to render individually instead. --- app/controllers/projects/compare_controller.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'app/controllers/projects/compare_controller.rb') diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index d240b9fe989..8a04f63f4d4 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -6,7 +6,7 @@ class Projects::CompareController < Projects::ApplicationController # Authorize before_action :require_non_empty_project before_action :authorize_download_code! - before_action :assign_ref_vars, only: [:index, :show] + before_action :assign_ref_vars, only: [:index, :show, :diff_for_path] before_action :merge_request, only: [:index, :show] def index @@ -35,6 +35,22 @@ class Projects::CompareController < Projects::ApplicationController end end + def diff_for_path + compare = CompareService.new. + execute(@project, @head_ref, @project, @base_ref, diff_options) + + return render_404 unless compare + + @commit = @project.commit(@head_ref) + @base_commit = @project.merge_base_commit(@base_ref, @head_ref) + diffs = compare.diffs(diff_options.merge(paths: [params[:path]])) + + @diff_notes_disabled = true + @grouped_diff_notes = {} + + render_diff_for_path(diffs, [@base_commit, @commit], @project) + end + def create redirect_to namespace_project_compare_path(@project.namespace, @project, params[:from], params[:to]) -- cgit v1.2.1 From 6a46926f88d504778ae49f7824d2b1284a1c62ff Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 6 Jul 2016 17:51:02 +0100 Subject: Remove unused argument to CompareService#execute --- app/controllers/projects/compare_controller.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'app/controllers/projects/compare_controller.rb') diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 8a04f63f4d4..5e00d2d5aff 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -14,7 +14,7 @@ class Projects::CompareController < Projects::ApplicationController def show compare = CompareService.new. - execute(@project, @head_ref, @project, @start_ref, diff_options) + execute(@project, @head_ref, @project, @start_ref) if compare @commits = Commit.decorate(compare.commits, @project) @@ -37,18 +37,24 @@ class Projects::CompareController < Projects::ApplicationController def diff_for_path compare = CompareService.new. - execute(@project, @head_ref, @project, @base_ref, diff_options) + execute(@project, @head_ref, @project, @start_ref) return render_404 unless compare + @start_commit = @project.commit(@start_ref) @commit = @project.commit(@head_ref) - @base_commit = @project.merge_base_commit(@base_ref, @head_ref) + @base_commit = @project.merge_base_commit(@start_ref, @head_ref) diffs = compare.diffs(diff_options.merge(paths: [params[:path]])) + diff_refs = Gitlab::Diff::DiffRefs.new( + base_sha: @base_commit.try(:sha), + start_sha: @start_commit.try(:sha), + head_sha: @commit.try(:sha) + ) @diff_notes_disabled = true @grouped_diff_notes = {} - render_diff_for_path(diffs, [@base_commit, @commit], @project) + render_diff_for_path(diffs, diff_refs, @project) end def create -- cgit v1.2.1 From ff55398aafa2feccaba4ed470becabc526b4df48 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 6 Jul 2016 18:15:27 +0100 Subject: DRY up diff_for_path actions 1. Move render method to a concern, not a helper. 2. Let DiffHelper#diff_options automatically add the path option. 3. Move more instance var definitions to before filters. --- app/controllers/projects/compare_controller.rb | 68 +++++++++++--------------- 1 file changed, 28 insertions(+), 40 deletions(-) (limited to 'app/controllers/projects/compare_controller.rb') diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 5e00d2d5aff..5f3ee71444d 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -1,60 +1,26 @@ require 'addressable/uri' class Projects::CompareController < Projects::ApplicationController + include DiffForPath include DiffHelper # Authorize before_action :require_non_empty_project before_action :authorize_download_code! - before_action :assign_ref_vars, only: [:index, :show, :diff_for_path] + before_action :define_ref_vars, only: [:index, :show, :diff_for_path] + before_action :define_diff_vars, only: [:show, :diff_for_path] before_action :merge_request, only: [:index, :show] def index end def show - compare = CompareService.new. - execute(@project, @head_ref, @project, @start_ref) - - if compare - @commits = Commit.decorate(compare.commits, @project) - - @start_commit = @project.commit(@start_ref) - @commit = @project.commit(@head_ref) - @base_commit = @project.merge_base_commit(@start_ref, @head_ref) - - @diffs = compare.diffs(diff_options) - @diff_refs = Gitlab::Diff::DiffRefs.new( - base_sha: @base_commit.try(:sha), - start_sha: @start_commit.try(:sha), - head_sha: @commit.try(:sha) - ) - - @diff_notes_disabled = true - @grouped_diff_notes = {} - end end def diff_for_path - compare = CompareService.new. - execute(@project, @head_ref, @project, @start_ref) - - return render_404 unless compare - - @start_commit = @project.commit(@start_ref) - @commit = @project.commit(@head_ref) - @base_commit = @project.merge_base_commit(@start_ref, @head_ref) - diffs = compare.diffs(diff_options.merge(paths: [params[:path]])) - diff_refs = Gitlab::Diff::DiffRefs.new( - base_sha: @base_commit.try(:sha), - start_sha: @start_commit.try(:sha), - head_sha: @commit.try(:sha) - ) - - @diff_notes_disabled = true - @grouped_diff_notes = {} + return render_404 unless @compare - render_diff_for_path(diffs, diff_refs, @project) + render_diff_for_path(@diffs, @diff_refs, @project) end def create @@ -64,11 +30,33 @@ class Projects::CompareController < Projects::ApplicationController private - def assign_ref_vars + def define_ref_vars @start_ref = Addressable::URI.unescape(params[:from]) @ref = @head_ref = Addressable::URI.unescape(params[:to]) end + def define_diff_vars + @compare = CompareService.new.execute(@project, @head_ref, @project, @start_ref) + + if @compare + @commits = Commit.decorate(@compare.commits, @project) + + @start_commit = @project.commit(@start_ref) + @commit = @project.commit(@head_ref) + @base_commit = @project.merge_base_commit(@start_ref, @head_ref) + + @diffs = @compare.diffs(diff_options) + @diff_refs = Gitlab::Diff::DiffRefs.new( + base_sha: @base_commit.try(:sha), + start_sha: @start_commit.try(:sha), + head_sha: @commit.try(:sha) + ) + + @diff_notes_disabled = true + @grouped_diff_notes = {} + end + end + def merge_request @merge_request ||= @project.merge_requests.opened. find_by(source_project: @project, source_branch: @head_ref, target_branch: @start_ref) -- cgit v1.2.1