summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/project.rb11
-rw-r--r--app/observers/project_activity_cache_observer.rb8
-rw-r--r--config/application.rb1
-rw-r--r--db/migrate/20130403003950_add_last_activity_column_into_project.rb15
-rw-r--r--db/schema.rb4
5 files changed, 32 insertions, 7 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
+
diff --git a/config/application.rb b/config/application.rb
index d71de88ebe3..8f7d9c07ac8 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -24,6 +24,7 @@ module Gitlab
# Activate observers that should always be running.
config.active_record.observers = :activity_observer,
+ :project_activity_cache_observer,
:issue_observer,
:key_observer,
:merge_request_observer,
diff --git a/db/migrate/20130403003950_add_last_activity_column_into_project.rb b/db/migrate/20130403003950_add_last_activity_column_into_project.rb
new file mode 100644
index 00000000000..ddb04843de1
--- /dev/null
+++ b/db/migrate/20130403003950_add_last_activity_column_into_project.rb
@@ -0,0 +1,15 @@
+class AddLastActivityColumnIntoProject < ActiveRecord::Migration
+ def up
+ add_column :projects, :last_activity_at, :datetime
+ add_index :projects, :last_activity_at
+
+ Project.find_each do |project|
+ project.update_attribute(:last_activity_at, project.last_activity_date)
+ end
+ end
+
+ def down
+ remove_index :projects, :last_activity_at
+ remove_column :projects, :last_activity_at
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 3c8b9eaee43..da4942dda0a 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130325173941) do
+ActiveRecord::Schema.define(:version => 20130403003950) do
create_table "events", :force => true do |t|
t.string "target_type"
@@ -156,9 +156,11 @@ ActiveRecord::Schema.define(:version => 20130325173941) do
t.string "issues_tracker", :default => "gitlab", :null => false
t.string "issues_tracker_id"
t.boolean "snippets_enabled", :default => true, :null => false
+ t.datetime "last_activity_at"
end
add_index "projects", ["creator_id"], :name => "index_projects_on_owner_id"
+ add_index "projects", ["last_activity_at"], :name => "index_projects_on_last_activity_at"
add_index "projects", ["namespace_id"], :name => "index_projects_on_namespace_id"
create_table "protected_branches", :force => true do |t|