diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 8c90f5aee26cb84f8c7053009eddc1fe8623e33b..96f8f2914514a1e7876400eb291ee418f0ea9cc7 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 8656890a45690557413b9b6e440ef2bc2bc3e357..dbd533f84947c308d0dcc546eeb46156bb8c637a 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/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml index d40d9525bb89d42edac9cb70cff303e6822382c0..f47e8b3e9ff882c0fb32392608a1f1c9dad12034 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 diff --git a/config/initializers/4_resque.rb b/config/initializers/4_resque.rb index 419dbe0606107554236ba85e1abd556bb03c1dfa..03c2b785fae43020336982a7645ee31f15021fcd 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/config/unicorn.rb.example b/config/unicorn.rb.example index 425dbf33f8696ce36b75096b61be48fc48998901..abd42b4bba64606c4f0d361e804335ede8f2bee7 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 diff --git a/lib/tasks/gitlab/gitolite_rebuild.rake b/lib/tasks/gitlab/gitolite_rebuild.rake index fce10eb5b692a4fc3e230a67be1bc87695b353f1..41b48f73d8f2d85170ed823757bfb1580fcb7456 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 diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake index 0825324a424812fcc902cbf9a4326856ed85332c..bf031403db8ef9209e9911eedfb4ae8a7cf9c4e3 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)"