summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAndrey Kumanyaev <me@zzet.org>2013-04-03 06:05:00 +0400
committerAndrey Kumanyaev <me@zzet.org>2013-04-03 06:21:04 +0400
commit734d6fcdf00846364fa39fc374753b7ea2cef603 (patch)
tree6fe992f84eedd670b989e246a53a4cdf111776b0 /app
parent41bbbb6df0300579867c4654d8662b38fa9f0a58 (diff)
downloadgitlab-ce-734d6fcdf00846364fa39fc374753b7ea2cef603.tar.gz
Perfomance updating Project activity sort
Diffstat (limited to 'app')
-rw-r--r--app/models/project.rb11
-rw-r--r--app/observers/project_activity_cache_observer.rb8
2 files changed, 13 insertions, 6 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 3b78f1005f3..463829229b5 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -29,7 +29,7 @@ class Project < ActiveRecord::Base
attr_accessible :name, :path, :description, :default_branch, :issues_tracker,
:issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id,
- :wiki_enabled, :public, :import_url, as: [:default, :admin]
+ :wiki_enabled, :public, :import_url, :last_activity_at, as: [:default, :admin]
attr_accessible :namespace_id, :creator_id, as: :admin
@@ -92,12 +92,12 @@ class Project < ActiveRecord::Base
scope :in_team, ->(team) { where("id IN (:ids)", ids: team.projects.map(&:id)) }
scope :in_namespace, ->(namespace) { where(namespace_id: namespace.id) }
scope :in_group_namespace, -> { joins(:group) }
- scope :sorted_by_activity, -> { order("(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC") }
+ scope :sorted_by_activity, -> { order("last_activity_at DESC") }
scope :personal, ->(user) { where(namespace_id: user.namespace_id) }
scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) }
scope :public_only, -> { where(public: true) }
- enumerize :issues_tracker, :in => (Gitlab.config.issues_tracker.keys).append(:gitlab), :default => :gitlab
+ enumerize :issues_tracker, in: (Gitlab.config.issues_tracker.keys).append(:gitlab), default: :gitlab
class << self
def abandoned
@@ -157,8 +157,7 @@ class Project < ActiveRecord::Base
unless creator.can_create_project?
errors[:limit_reached] << ("Your own projects limit is #{creator.projects_limit}! Please contact administrator to increase it")
end
- rescue => ex
- errors[:base] << ex.message
+ rescue
errors[:base] << ("Can't check your ability to create project")
end
@@ -191,7 +190,7 @@ class Project < ActiveRecord::Base
end
def last_activity_date
- last_event.try(:created_at) || updated_at
+ last_activity_at
end
def project_id
diff --git a/app/observers/project_activity_cache_observer.rb b/app/observers/project_activity_cache_observer.rb
new file mode 100644
index 00000000000..2aa5872da64
--- /dev/null
+++ b/app/observers/project_activity_cache_observer.rb
@@ -0,0 +1,8 @@
+class ProjectActivityCacheObserver < BaseObserver
+ observe :event
+
+ def after_create(event)
+ event.project.update_attribute(:last_activity_at, event.created_at) if event.project
+ end
+end
+