From 6b9f221a278ebe4a78f4f0b4d60f87659785595c Mon Sep 17 00:00:00 2001
From: gitlabhq <m@gitlabhq.com>
Date: Tue, 15 Nov 2011 04:09:07 -0500
Subject: [PATCH] perfomance fix

---
 app/controllers/issues_controller.rb |  4 +++-
 app/models/note.rb                   |  2 ++
 app/models/project.rb                | 14 +++++++++++---
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 508cfc3974..108577b912 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -19,6 +19,8 @@ class IssuesController < ApplicationController
               else @project.issues.opened
               end
 
+    @issues = @issues.includes(:author, :project)
+
     respond_to do |format|
       format.html # index.html.erb
       format.js
@@ -35,7 +37,7 @@ class IssuesController < ApplicationController
   end
 
   def show
-    @notes = @issue.notes.order("created_at DESC").limit(20)
+    @notes = @issue.notes.inc_author.order("created_at DESC").limit(20)
     @note = @project.notes.new(:noteable => @issue)
 
     respond_to do |format| 
diff --git a/app/models/note.rb b/app/models/note.rb
index c3c10639bf..b256347abb 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -30,6 +30,8 @@ class Note < ActiveRecord::Base
   scope :last_week, where("created_at  >= :date", :date => (Date.today - 7.days))
   scope :since, lambda { |day| where("created_at  >= :date", :date => (day)) }
   scope :fresh, order("created_at DESC")
+  scope :inc_author_project, includes(:project, :author)
+  scope :inc_author, includes(:author)
 
   mount_uploader :attachment, AttachmentUploader
 end
diff --git a/app/models/project.rb b/app/models/project.rb
index e4448e786e..474e42ed08 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -74,8 +74,16 @@ class Project < ActiveRecord::Base
     users_projects.find_by_user_id(user.id) if user
   end
 
+  def fresh_issues(n)
+    issues.includes(:project, :author).order("created_at desc").first(n)
+  end
+
+  def fresh_notes(n)
+    notes.inc_author_project.order("created_at desc").first(n)
+  end
+
   def common_notes
-    notes.where(:noteable_type => ["", nil])
+    notes.where(:noteable_type => ["", nil]).inc_author_project
   end
 
   def build_commit_note(commit)
@@ -134,8 +142,8 @@ class Project < ActiveRecord::Base
   def updates(n = 3)
     [ 
       fresh_commits(n),
-      issues.last(n),
-      notes.fresh.limit(n)
+      fresh_issues(n),
+      fresh_notes(n)
     ].compact.flatten.sort do |x, y|
       y.created_at <=> x.created_at
     end[0...n]
-- 
2.30.9