Update projects in gitolite after namespace moved. Added rake task to cleanup garbage from gitolite
This commit is contained in:
parent
8ef7b9b6d1
commit
45b6103997
|
@ -27,10 +27,13 @@ class Namespace < ActiveRecord::Base
|
||||||
|
|
||||||
after_create :ensure_dir_exist
|
after_create :ensure_dir_exist
|
||||||
after_update :move_dir
|
after_update :move_dir
|
||||||
|
after_commit :update_gitolite, on: :update, if: :require_update_gitolite
|
||||||
after_destroy :rm_dir
|
after_destroy :rm_dir
|
||||||
|
|
||||||
scope :root, where('type IS NULL')
|
scope :root, where('type IS NULL')
|
||||||
|
|
||||||
|
attr_accessor :require_update_gitolite
|
||||||
|
|
||||||
def self.search query
|
def self.search query
|
||||||
where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
|
where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
|
||||||
end
|
end
|
||||||
|
@ -62,10 +65,18 @@ class Namespace < ActiveRecord::Base
|
||||||
|
|
||||||
if system("mv #{old_path} #{new_path}")
|
if system("mv #{old_path} #{new_path}")
|
||||||
send_update_instructions
|
send_update_instructions
|
||||||
|
@require_update_gitolite = true
|
||||||
|
else
|
||||||
|
raise "Namespace move error #{old_path} #{new_path}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_gitolite
|
||||||
|
@require_update_gitolite = false
|
||||||
|
projects.each(&:update_repository)
|
||||||
|
end
|
||||||
|
|
||||||
def rm_dir
|
def rm_dir
|
||||||
dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
|
dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
|
||||||
system("rm -rf #{dir_path}")
|
system("rm -rf #{dir_path}")
|
||||||
|
|
|
@ -24,7 +24,7 @@ module NamespacedProject
|
||||||
save!
|
save!
|
||||||
end
|
end
|
||||||
rescue Gitlab::ProjectMover::ProjectMoveError => ex
|
rescue Gitlab::ProjectMover::ProjectMoveError => ex
|
||||||
raise TransferError.new(ex.message)
|
raise Project::TransferError.new(ex.message)
|
||||||
end
|
end
|
||||||
|
|
||||||
def name_with_namespace
|
def name_with_namespace
|
||||||
|
|
|
@ -20,5 +20,38 @@ namespace :gitlab do
|
||||||
end
|
end
|
||||||
puts "Done with keys"
|
puts "Done with keys"
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue