summaryrefslogtreecommitdiff
path: root/lib/tasks
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-12-25 07:14:05 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-12-25 07:14:05 +0300
commitc5eba169cdcf0d66cd7c6b34dace639a08949dd9 (patch)
treed6b53f1455bffaf73958827704fda00272eda907 /lib/tasks
parentc8ba5c2d58b882fd7cd5342a42158bb5f810fd60 (diff)
downloadgitlab-ce-c5eba169cdcf0d66cd7c6b34dace639a08949dd9.tar.gz
Cleanup service tasks
Diffstat (limited to 'lib/tasks')
-rw-r--r--lib/tasks/gitlab/cleanup.rake128
-rw-r--r--lib/tasks/gitlab/gitolite_rebuild.rake33
2 files changed, 128 insertions, 33 deletions
diff --git a/lib/tasks/gitlab/cleanup.rake b/lib/tasks/gitlab/cleanup.rake
new file mode 100644
index 00000000000..2a0ffe0f4bd
--- /dev/null
+++ b/lib/tasks/gitlab/cleanup.rake
@@ -0,0 +1,128 @@
+namespace :gitlab do
+ namespace :cleanup do
+ desc "GITLAB | Cleanup | Clean gitolite config"
+ task :config => :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
+
+ desc "GITLAB | Cleanup | Clean namespaces"
+ task :dirs => :environment do
+ warn_user_is_not_gitlab
+ remove_flag = ENV['REMOVE']
+
+
+ namespaces = Namespace.pluck(:path)
+ git_base_path = Gitlab.config.gitolite.repos_path
+ all_dirs = Dir.glob(git_base_path + '/*')
+
+ puts git_base_path.yellow
+ puts "Looking for directories to remove... "
+
+ all_dirs.reject! do |dir|
+ # skip if git repo
+ dir =~ /.git$/
+ end
+
+ all_dirs.reject! do |dir|
+ dir_name = File.basename dir
+
+ # skip if namespace present
+ namespaces.include?(dir_name)
+ end
+
+ all_dirs.each do |dir_path|
+
+ if remove_flag
+ if FileUtils.rm_rf dir_path
+ puts "Removed...#{dir_path}".red
+ else
+ puts "Cannot remove #{dir_path}".red
+ end
+ else
+ puts "Can be removed: #{dir_path}".red
+ end
+ end
+
+ unless remove_flag
+ puts "To cleanup this directories run this command with REMOVE=true".yellow
+ end
+ end
+
+ desc "GITLAB | Cleanup | Clean respositories"
+ task :repos => :environment do
+ warn_user_is_not_gitlab
+ remove_flag = ENV['REMOVE']
+
+ git_base_path = Gitlab.config.gitolite.repos_path
+ all_dirs = Dir.glob(git_base_path + '/*')
+
+ global_projects = Project.where(namespace_id: nil).pluck(:path)
+
+ puts git_base_path.yellow
+ puts "Looking for global repos to remove... "
+
+ # skip non git repo
+ all_dirs.select! do |dir|
+ dir =~ /.git$/
+ end
+
+ # skip existing repos
+ all_dirs.reject! do |dir|
+ repo_name = File.basename dir
+ path = repo_name.gsub(/\.git$/, "")
+ global_projects.include?(path)
+ end
+
+ # skip gitolite admin
+ all_dirs.reject! do |dir|
+ repo_name = File.basename dir
+ repo_name == 'gitolite-admin.git'
+ end
+
+
+ all_dirs.each do |dir_path|
+ if remove_flag
+ if FileUtils.rm_rf dir_path
+ puts "Removed...#{dir_path}".red
+ else
+ puts "Cannot remove #{dir_path}".red
+ end
+ else
+ puts "Can be removed: #{dir_path}".red
+ end
+ end
+
+ unless remove_flag
+ puts "To cleanup this directories run this command with REMOVE=true".yellow
+ end
+ end
+ end
+end
diff --git a/lib/tasks/gitlab/gitolite_rebuild.rake b/lib/tasks/gitlab/gitolite_rebuild.rake
index 8fa466fbfd7..af2a2127ee2 100644
--- a/lib/tasks/gitlab/gitolite_rebuild.rake
+++ b/lib/tasks/gitlab/gitolite_rebuild.rake
@@ -23,38 +23,5 @@ 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