From 0344e0838d2ae6fae483bafed2be70808b731010 Mon Sep 17 00:00:00 2001 From: Sean McGivern <sean@gitlab.com> Date: Mon, 27 Mar 2017 10:46:14 +0100 Subject: [PATCH] Only load what we need when visiting MR diffs page The instance variables set in this action are only used by the JSON response. Visiting `merge_requests/:iid/diffs` in a browser always loads the `show` action, so we don't need to find an MR diff, or an environment, in that case. --- .../projects/merge_requests_controller.rb | 44 +++++++++---------- changelogs/unreleased/mr-diffs-speed-up.yml | 4 ++ 2 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 changelogs/unreleased/mr-diffs-speed-up.yml diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 2fadf7c8c81..c12e65e794b 100755 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -97,31 +97,31 @@ class Projects::MergeRequestsController < Projects::ApplicationController def diffs apply_diff_view_cookie! - @merge_request_diff = - if params[:diff_id] - @merge_request.merge_request_diffs.viewable.find(params[:diff_id]) - else - @merge_request.merge_request_diff - end - - @merge_request_diffs = @merge_request.merge_request_diffs.viewable.select_without_diff - @comparable_diffs = @merge_request_diffs.select { |diff| diff.id < @merge_request_diff.id } - - if params[:start_sha].present? - @start_sha = params[:start_sha] - @start_version = @comparable_diffs.find { |diff| diff.head_commit_sha == @start_sha } - - unless @start_version - @start_sha = @merge_request_diff.head_commit_sha - @start_version = @merge_request_diff - end - end - - @environment = @merge_request.environments_for(current_user).last - respond_to do |format| format.html { define_discussion_vars } format.json do + @merge_request_diff = + if params[:diff_id] + @merge_request.merge_request_diffs.viewable.find(params[:diff_id]) + else + @merge_request.merge_request_diff + end + + @merge_request_diffs = @merge_request.merge_request_diffs.viewable.select_without_diff + @comparable_diffs = @merge_request_diffs.select { |diff| diff.id < @merge_request_diff.id } + + if params[:start_sha].present? + @start_sha = params[:start_sha] + @start_version = @comparable_diffs.find { |diff| diff.head_commit_sha == @start_sha } + + unless @start_version + @start_sha = @merge_request_diff.head_commit_sha + @start_version = @merge_request_diff + end + end + + @environment = @merge_request.environments_for(current_user).last + if @start_sha compared_diff_version else diff --git a/changelogs/unreleased/mr-diffs-speed-up.yml b/changelogs/unreleased/mr-diffs-speed-up.yml new file mode 100644 index 00000000000..ccc7a99d05e --- /dev/null +++ b/changelogs/unreleased/mr-diffs-speed-up.yml @@ -0,0 +1,4 @@ +--- +title: Speed up initial rendering of MR diffs page +merge_request: +author: -- GitLab