Update projects in gitolite after namespace moved. Added rake task to cleanup garbage from gitolite
This commit is contained in:
parent
dea8628171
commit
a87fccc083
|
@ -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}")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -23,5 +23,38 @@ namespace :gitlab do
|
|||
puts "... #{"done".green}"
|
||||
end
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue