summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-02 13:48:26 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-02 13:48:26 +0000
commit9dfc4fe6ac0194722dacd4ed5e2539126419c360 (patch)
treec23f3d6649762ec2ff2b5596f203c3ac7001a772
parent3bec6e89403b2d5679f52ceee9203573f95b050c (diff)
parentd10b34a685509eebbe52391ffce861cde45cc0ca (diff)
downloadgitlab-ce-9dfc4fe6ac0194722dacd4ed5e2539126419c360.tar.gz
Merge branch 'repo-size-in-db' into 'master'
Save repository size to projects table This will allow us to get largest repos by simple sql query. Also it increase loading of `admin/projects` page a lot because right now it calculate 20x project sizes per page
-rw-r--r--app/helpers/projects_helper.rb2
-rw-r--r--app/models/project.rb4
-rw-r--r--app/services/git_push_service.rb1
-rw-r--r--db/migrate/20140502115131_add_repo_size_to_db.rb5
-rw-r--r--db/migrate/20140502125220_migrate_repo_size.rb21
-rw-r--r--db/schema.rb3
6 files changed, 34 insertions, 2 deletions
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 9bb3efc41d8..ef0460f8728 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -163,7 +163,7 @@ module ProjectsHelper
end
def repository_size(project = nil)
- "#{(project || @project).repository.size} MB"
+ "#{(project || @project).repository_size} MB"
rescue
# In order to prevent 500 error
# when application cannot allocate memory
diff --git a/app/models/project.rb b/app/models/project.rb
index 3ae47c18136..45aeaceef83 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -562,4 +562,8 @@ class Project < ActiveRecord::Base
def forked_from?(project)
forked? && project == forked_from_project
end
+
+ def update_repository_size
+ update_attribute(:repository_size, repository.size)
+ end
end
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index 351b446457d..715b5690751 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -25,6 +25,7 @@ class GitPushService
project.ensure_satellite_exists
project.repository.expire_cache
+ project.update_repository_size
if push_to_existing_branch?(ref, oldrev)
project.update_merge_requests(oldrev, newrev, ref, @user)
diff --git a/db/migrate/20140502115131_add_repo_size_to_db.rb b/db/migrate/20140502115131_add_repo_size_to_db.rb
new file mode 100644
index 00000000000..7361d1a9440
--- /dev/null
+++ b/db/migrate/20140502115131_add_repo_size_to_db.rb
@@ -0,0 +1,5 @@
+class AddRepoSizeToDb < ActiveRecord::Migration
+ def change
+ add_column :projects, :repository_size, :float, default: 0
+ end
+end
diff --git a/db/migrate/20140502125220_migrate_repo_size.rb b/db/migrate/20140502125220_migrate_repo_size.rb
new file mode 100644
index 00000000000..eed6d366814
--- /dev/null
+++ b/db/migrate/20140502125220_migrate_repo_size.rb
@@ -0,0 +1,21 @@
+class MigrateRepoSize < ActiveRecord::Migration
+ def up
+ Project.reset_column_information
+ Project.find_each(batch_size: 500) do |project|
+ begin
+ if project.empty_repo?
+ print '-'
+ else
+ project.update_repository_size
+ print '.'
+ end
+ rescue
+ print 'F'
+ end
+ end
+ puts 'Done'
+ end
+
+ def down
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index a26c60874a3..93837337afc 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20140428105831) do
+ActiveRecord::Schema.define(version: 20140502125220) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -222,6 +222,7 @@ ActiveRecord::Schema.define(version: 20140428105831) do
t.integer "visibility_level", default: 0, null: false
t.boolean "archived", default: false, null: false
t.string "import_status"
+ t.float "repository_size", default: 0.0
end
add_index "projects", ["creator_id"], name: "index_projects_on_creator_id", using: :btree