From 7c5af3ea92e213423f8f0e376cbb8fd8b863f22c Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@selenight.nl>
Date: Fri, 18 Nov 2016 14:20:45 +0200
Subject: [PATCH] More aggressively preload on merge request and issue index
 pages

---
 app/controllers/concerns/issuable_collections.rb           | 4 ++--
 app/controllers/concerns/issues_action.rb                  | 1 -
 app/controllers/concerns/merge_requests_action.rb          | 1 -
 app/controllers/projects/merge_requests_controller.rb      | 1 -
 app/helpers/issuables_helper.rb                            | 6 ++++--
 app/views/projects/merge_requests/_merge_request.html.haml | 3 +++
 changelogs/unreleased/optimize-mr-index.yml                | 4 ++++
 7 files changed, 13 insertions(+), 7 deletions(-)
 create mode 100644 changelogs/unreleased/optimize-mr-index.yml

diff --git a/app/controllers/concerns/issuable_collections.rb b/app/controllers/concerns/issuable_collections.rb
index b5e79099e39..6247934f81e 100644
--- a/app/controllers/concerns/issuable_collections.rb
+++ b/app/controllers/concerns/issuable_collections.rb
@@ -10,11 +10,11 @@ module IssuableCollections
   private
 
   def issues_collection
-    issues_finder.execute
+    issues_finder.execute.preload(:project, :author, :assignee, :labels, :milestone, project: :namespace)
   end
 
   def merge_requests_collection
-    merge_requests_finder.execute
+    merge_requests_finder.execute.preload(:source_project, :target_project, :author, :assignee, :labels, :milestone, :merge_request_diff, target_project: :namespace)
   end
 
   def issues_finder
diff --git a/app/controllers/concerns/issues_action.rb b/app/controllers/concerns/issues_action.rb
index b89fb94be6e..b46adcceb60 100644
--- a/app/controllers/concerns/issues_action.rb
+++ b/app/controllers/concerns/issues_action.rb
@@ -7,7 +7,6 @@ module IssuesAction
 
     @issues = issues_collection
               .non_archived
-              .preload(:author, :project)
               .page(params[:page])
 
     respond_to do |format|
diff --git a/app/controllers/concerns/merge_requests_action.rb b/app/controllers/concerns/merge_requests_action.rb
index a1b0eee37f9..6546a07b41c 100644
--- a/app/controllers/concerns/merge_requests_action.rb
+++ b/app/controllers/concerns/merge_requests_action.rb
@@ -7,7 +7,6 @@ module MergeRequestsAction
 
     @merge_requests = merge_requests_collection
                       .non_archived
-                      .preload(:author, :target_project)
                       .page(params[:page])
   end
 end
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index dff0213411c..036fde87619 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -38,7 +38,6 @@ class Projects::MergeRequestsController < Projects::ApplicationController
   def index
     @merge_requests = merge_requests_collection
     @merge_requests = @merge_requests.page(params[:page])
-    @merge_requests = @merge_requests.preload(:target_project)
 
     if params[:label_name].present?
       labels_params = { project_id: @project.id, title: params[:label_name] }
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index ce2cabd7a3a..8bebda07787 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -171,9 +171,11 @@ module IssuablesHelper
 
   def issuables_count_for_state(issuable_type, state)
     issuables_finder = public_send("#{issuable_type}_finder")
-    issuables_finder.params[:state] = state
+    
+    params = issuables_finder.params.merge(state: state)
+    finder = issuables_finder.class.new(issuables_finder.current_user, params)
 
-    issuables_finder.execute.page(1).total_count
+    finder.execute.page(1).total_count
   end
 
   IRRELEVANT_PARAMS_FOR_CACHE_KEY = %i[utf8 sort page]
diff --git a/app/views/projects/merge_requests/_merge_request.html.haml b/app/views/projects/merge_requests/_merge_request.html.haml
index 12408068834..9ffcc48eb80 100644
--- a/app/views/projects/merge_requests/_merge_request.html.haml
+++ b/app/views/projects/merge_requests/_merge_request.html.haml
@@ -54,15 +54,18 @@
       = link_to namespace_project_commits_path(merge_request.project.namespace, merge_request.project, merge_request.target_branch) do
         = icon('code-fork')
         = merge_request.target_branch
+
     - if merge_request.milestone
       &nbsp;
       = link_to namespace_project_merge_requests_path(merge_request.project.namespace, merge_request.project, milestone_title: merge_request.milestone.title) do
         = icon('clock-o')
         = merge_request.milestone.title
+
     - if merge_request.labels.any?
       &nbsp;
       - merge_request.labels.each do |label|
         = link_to_label(label, subject: merge_request.project, type: :merge_request)
+        
     - if merge_request.tasks?
       &nbsp;
       %span.task-status
diff --git a/changelogs/unreleased/optimize-mr-index.yml b/changelogs/unreleased/optimize-mr-index.yml
new file mode 100644
index 00000000000..1090b6d4528
--- /dev/null
+++ b/changelogs/unreleased/optimize-mr-index.yml
@@ -0,0 +1,4 @@
+---
+title: More aggressively preload on merge request and issue index pages
+merge_request: 
+author: 
-- 
GitLab