From 45b6103997ef07644d78d603938d357a2b3d035a Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 24 Dec 2012 20:01:49 +0200 Subject: [PATCH 1/4] Update projects in gitolite after namespace moved. Added rake task to cleanup garbage from gitolite --- app/models/namespace.rb | 11 +++++++++ app/roles/namespaced_project.rb | 2 +- lib/tasks/gitlab/gitolite_rebuild.rake | 33 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 8c90f5aee26..96f8f291451 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -27,10 +27,13 @@ class Namespace < ActiveRecord::Base after_create :ensure_dir_exist after_update :move_dir + after_commit :update_gitolite, on: :update, if: :require_update_gitolite after_destroy :rm_dir scope :root, where('type IS NULL') + attr_accessor :require_update_gitolite + def self.search query where("name LIKE :query OR path LIKE :query", query: "%#{query}%") end @@ -62,10 +65,18 @@ class Namespace < ActiveRecord::Base if system("mv #{old_path} #{new_path}") send_update_instructions + @require_update_gitolite = true + else + raise "Namespace move error #{old_path} #{new_path}" end end end + def update_gitolite + @require_update_gitolite = false + projects.each(&:update_repository) + end + def rm_dir dir_path = File.join(Gitlab.config.gitolite.repos_path, path) system("rm -rf #{dir_path}") diff --git a/app/roles/namespaced_project.rb b/app/roles/namespaced_project.rb index 8656890a456..dbd533f8494 100644 --- a/app/roles/namespaced_project.rb +++ b/app/roles/namespaced_project.rb @@ -24,7 +24,7 @@ module NamespacedProject save! end rescue Gitlab::ProjectMover::ProjectMoveError => ex - raise TransferError.new(ex.message) + raise Project::TransferError.new(ex.message) end def name_with_namespace diff --git a/lib/tasks/gitlab/gitolite_rebuild.rake b/lib/tasks/gitlab/gitolite_rebuild.rake index fce10eb5b69..41b48f73d8f 100644 --- a/lib/tasks/gitlab/gitolite_rebuild.rake +++ b/lib/tasks/gitlab/gitolite_rebuild.rake @@ -20,5 +20,38 @@ namespace :gitlab do end puts "Done with keys" end + + desc "GITLAB | Cleanup gitolite config" + task :cleanup => :environment do + warn_user_is_not_gitlab + + real_repos = Project.all.map(&:path_with_namespace) + real_repos << "gitolite-admin" + real_repos << "@all" + + remove_flag = ENV['REMOVE'] + + puts "Looking for repositories to remove... " + Gitlab::GitoliteConfig.new.apply do |config| + all_repos = [] + garbage_repos = [] + + all_repos = config.conf.repos.keys + garbage_repos = all_repos - real_repos + + garbage_repos.each do |repo_name| + if remove_flag + config.conf.rm_repo(repo_name) + print "to remove...".red + end + + puts repo_name.red + end + end + + unless remove_flag + puts "To cleanup repositories run this command with REMOVE=true".yellow + end + end end end -- GitLab From 19cb29e448f8959d86dde38f8f85ad01c3e1bb72 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 24 Dec 2012 21:27:12 +0200 Subject: [PATCH 2/4] Fix MR count for group scope --- app/views/layouts/group.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml index d40d9525bb8..f47e8b3e9ff 100644 --- a/app/views/layouts/group.html.haml +++ b/app/views/layouts/group.html.haml @@ -15,7 +15,7 @@ = nav_link(path: 'groups#merge_requests') do = link_to merge_requests_group_path(@group) do Merge Requests - %span.count= current_user.cared_merge_requests.of_group(@group).count + %span.count= current_user.cared_merge_requests.opened.of_group(@group).count = nav_link(path: 'groups#search') do = link_to "Search", search_group_path(@group) = nav_link(path: 'groups#people') do -- GitLab From c68540e9c94eed7dbe7683e47450b026c9ee3bb6 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 26 Dec 2012 19:56:56 +0200 Subject: [PATCH 3/4] Fix resque for postgres --- config/initializers/4_resque.rb | 2 ++ lib/tasks/resque.rake | 1 + 2 files changed, 3 insertions(+) diff --git a/config/initializers/4_resque.rb b/config/initializers/4_resque.rb index 419dbe06061..03c2b785fae 100644 --- a/config/initializers/4_resque.rb +++ b/config/initializers/4_resque.rb @@ -27,3 +27,5 @@ Resque::Server.use Authentication # Mailer Resque::Mailer.excluded_environments = [] + +Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection } diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake index 0825324a424..bf031403db8 100644 --- a/lib/tasks/resque.rake +++ b/lib/tasks/resque.rake @@ -4,6 +4,7 @@ task "resque:setup" => :environment do Resque.after_fork do Resque.redis.client.reconnect end + Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection } end desc "Alias for resque:work (To run workers on Heroku)" -- GitLab From 846250239964dfafe7c50f915855f6501aceb6c9 Mon Sep 17 00:00:00 2001 From: Bertrand Paquet Date: Fri, 28 Dec 2012 09:32:57 +0100 Subject: [PATCH 4/4] Reconnect Redis after unicorn fork --- config/unicorn.rb.example | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config/unicorn.rb.example b/config/unicorn.rb.example index 425dbf33f86..abd42b4bba6 100644 --- a/config/unicorn.rb.example +++ b/config/unicorn.rb.example @@ -59,6 +59,9 @@ after_fork do |server, worker| # sockets, e.g. db connection defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection - # Redis and Memcached would go here but their connections are established + + defined?(Resque) and Resque.redis.client.reconnect + + # Memcached would go here but their connections are established # on demand, so the master never opens a socket end -- GitLab