diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-05-02 13:48:26 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-05-02 13:48:26 +0000 |
commit | 9dfc4fe6ac0194722dacd4ed5e2539126419c360 (patch) | |
tree | c23f3d6649762ec2ff2b5596f203c3ac7001a772 | |
parent | 3bec6e89403b2d5679f52ceee9203573f95b050c (diff) | |
parent | d10b34a685509eebbe52391ffce861cde45cc0ca (diff) | |
download | gitlab-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.rb | 2 | ||||
-rw-r--r-- | app/models/project.rb | 4 | ||||
-rw-r--r-- | app/services/git_push_service.rb | 1 | ||||
-rw-r--r-- | db/migrate/20140502115131_add_repo_size_to_db.rb | 5 | ||||
-rw-r--r-- | db/migrate/20140502125220_migrate_repo_size.rb | 21 | ||||
-rw-r--r-- | db/schema.rb | 3 |
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 |