Commit 83696b127b7822482957a894816b0e3c2daea0b5
1 parent
30ee5362
Exists in
master
and in
4 other branches
cleanup rake tasks
Showing
8 changed files
with
77 additions
and
120 deletions
Show diff stats
lib/tasks/bulk_add_permission.rake
1 | -desc "Add all users to all projects, system administratos are added as masters" | |
1 | +desc "Add all users to all projects (admin users are added as masters)" | |
2 | 2 | task :add_users_to_project_teams => :environment do |t, args| |
3 | - users = User.find_all_by_admin(false, :select => 'id').map(&:id) | |
4 | - admins = User.find_all_by_admin(true, :select => 'id').map(&:id) | |
3 | + user_ids = User.where(:admin => false).pluck(:id) | |
4 | + admin_ids = User.where(:admin => true).pluck(:id) | |
5 | 5 | |
6 | - users.each do |user| | |
7 | - puts "#{user}" | |
8 | - end | |
9 | - | |
10 | - Project.all.each do |project| | |
11 | - puts "Importing #{users.length} users into #{project.path}" | |
12 | - UsersProject.bulk_import(project, users, UsersProject::DEVELOPER) | |
13 | - puts "Importing #{admins.length} admins into #{project.path}" | |
14 | - UsersProject.bulk_import(project, admins, UsersProject::MASTER) | |
6 | + Project.find_each do |project| | |
7 | + puts "Importing #{user_ids.size} users into #{project.code}" | |
8 | + UsersProject.bulk_import(project, user_ids, UsersProject::DEVELOPER) | |
9 | + puts "Importing #{admin_ids.size} admins into #{project.code}" | |
10 | + UsersProject.bulk_import(project, admin_ids, UsersProject::MASTER) | |
15 | 11 | end |
16 | 12 | end |
17 | 13 | |
18 | 14 | desc "Add user to as a developer to all projects" |
19 | 15 | task :add_user_to_project_teams, [:email] => :environment do |t, args| |
20 | - user_email = args.email | |
21 | - user = User.find_by_email(user_email) | |
22 | - | |
23 | - project_ids = Project.all.map(&:id) | |
16 | + user = User.find_by_email args.email | |
17 | + project_ids = Project.pluck(:id) | |
24 | 18 | |
25 | - UsersProject.user_bulk_import(user,project_ids,UsersProject::DEVELOPER) | |
19 | + UsersProject.user_bulk_import(user, project_ids, UsersProject::DEVELOPER) | |
26 | 20 | end | ... | ... |
lib/tasks/bulk_import.rake
1 | - | |
2 | 1 | desc "Imports existing Git repos from a directory into new projects in git_base_path" |
3 | 2 | task :import_projects, [:directory,:email] => :environment do |t, args| |
4 | - user_email = args.email | |
5 | - import_directory = args.directory | |
3 | + user_email, import_directory = args.email, args.directory | |
6 | 4 | repos_to_import = Dir.glob("#{import_directory}/*") |
7 | 5 | git_base_path = Gitlab.config.git_base_path |
8 | - puts "Found #{repos_to_import.length} repos to import" | |
6 | + imported_count, skipped_count, failed_count = 0 | |
7 | + | |
8 | + puts "Found #{repos_to_import.size} repos to import" | |
9 | 9 | |
10 | - imported_count = 0 | |
11 | - skipped_count = 0 | |
12 | - failed_count = 0 | |
13 | 10 | repos_to_import.each do |repo_path| |
14 | 11 | repo_name = File.basename repo_path |
12 | + clone_path = "#{git_base_path}#{repo_name}.git" | |
15 | 13 | |
16 | 14 | puts " Processing #{repo_name}" |
17 | - clone_path = "#{git_base_path}#{repo_name}.git" | |
18 | 15 | |
19 | 16 | if Dir.exists? clone_path |
20 | 17 | if Project.find_by_code(repo_name) |
... | ... | @@ -38,7 +35,6 @@ task :import_projects, [:directory,:email] => :environment do |t, args| |
38 | 35 | else |
39 | 36 | failed_count += 1 |
40 | 37 | end |
41 | - | |
42 | 38 | end |
43 | 39 | |
44 | 40 | puts "Finished importing #{imported_count} projects (skipped #{skipped_count}, failed #{failed_count})." |
... | ... | @@ -49,63 +45,39 @@ def clone_bare_repo_as_git(existing_path, new_path) |
49 | 45 | git_user = Gitlab.config.ssh_user |
50 | 46 | begin |
51 | 47 | sh "sudo -u #{git_user} -i git clone --bare '#{existing_path}' #{new_path}" |
52 | - true | |
53 | - rescue Exception=> msg | |
54 | - puts " ERROR: Faild to clone #{existing_path} to #{new_path}" | |
55 | - puts " Make sure #{git_user} can reach #{existing_path}" | |
56 | - puts " Exception-MSG: #{msg}" | |
57 | - false | |
48 | + rescue Exception => msg | |
49 | + puts " ERROR: Failed to clone #{existing_path} to #{new_path}" | |
50 | + puts " Make sure #{git_user} can reach #{existing_path}" | |
51 | + puts " Exception-MSG: #{msg}" | |
58 | 52 | end |
59 | 53 | end |
60 | 54 | |
61 | -# Creats a project in Gitlag given a @project_name@ to use (for name, web url, and code | |
62 | -# url) and a @user_email@ that will be assigned as the owner of the project. | |
55 | +# Creates a project in GitLab given a `project_name` to use | |
56 | +# (for name, web url, and code url) and a `user_email` that will be | |
57 | +# assigned as the owner of the project. | |
63 | 58 | def create_repo_project(project_name, user_email) |
64 | - user = User.find_by_email(user_email) | |
65 | - if user | |
59 | + if user = User.find_by_email(user_email) | |
66 | 60 | # Using find_by_code since that's the most important identifer to be unique |
67 | 61 | if Project.find_by_code(project_name) |
68 | 62 | puts " INFO: Project #{project_name} already exists in Gitlab, skipping." |
69 | - false | |
70 | 63 | else |
71 | - project = nil | |
72 | - if Project.find_by_code(project_name) | |
73 | - puts " ERROR: Project already exists #{project_name}" | |
74 | - return false | |
75 | - project = Project.find_by_code(project_name) | |
76 | - else | |
77 | - project = Project.create( | |
78 | - name: project_name, | |
79 | - code: project_name, | |
80 | - path: project_name, | |
81 | - owner: user, | |
82 | - description: "Automatically created from Rake on #{Time.now.to_s}" | |
83 | - ) | |
84 | - end | |
85 | - | |
86 | - unless project.valid? | |
87 | - puts " ERROR: Failed to create project #{project} because #{project.errors.first}" | |
88 | - return false | |
89 | - end | |
90 | - | |
91 | - # Add user as admin for project | |
92 | - project.users_projects.create!( | |
93 | - :project_access => UsersProject::MASTER, | |
94 | - :user => user | |
64 | + project = Project.create( | |
65 | + name: project_name, | |
66 | + code: project_name, | |
67 | + path: project_name, | |
68 | + owner: user, | |
69 | + description: "Automatically created from 'import_projects' rake task on #{Time.now}" | |
95 | 70 | ) |
96 | 71 | |
97 | - # Per projects_controller.rb#37 | |
98 | - project.update_repository | |
99 | - | |
100 | 72 | if project.valid? |
101 | - true | |
73 | + # Add user as admin for project | |
74 | + project.users_projects.create!(:project_access => UsersProject::MASTER, :user => user) | |
75 | + project.update_repository | |
102 | 76 | else |
103 | 77 | puts " ERROR: Failed to create project #{project} because #{project.errors.first}" |
104 | - false | |
105 | 78 | end |
106 | 79 | end |
107 | 80 | else |
108 | - puts " ERROR: #{user_email} not found, skipping" | |
109 | - false | |
81 | + puts " ERROR: user with #{user_email} not found, skipping" | |
110 | 82 | end |
111 | 83 | end | ... | ... |
lib/tasks/gitlab/backup.rake
... | ... | @@ -2,22 +2,20 @@ require 'active_record/fixtures' |
2 | 2 | |
3 | 3 | namespace :gitlab do |
4 | 4 | namespace :app do |
5 | - | |
6 | - # Create backup of gitlab system | |
7 | - desc "GITLAB | Create a backup of the gitlab system" | |
5 | + # Create backup of GitLab system | |
6 | + desc "GITLAB | Create a backup of the GitLab system" | |
8 | 7 | task :backup_create => :environment do |
9 | - | |
10 | 8 | Rake::Task["gitlab:app:db_dump"].invoke |
11 | 9 | Rake::Task["gitlab:app:repo_dump"].invoke |
12 | 10 | |
13 | 11 | Dir.chdir(Gitlab.config.backup_path) |
14 | 12 | |
15 | 13 | # saving additional informations |
16 | - s = Hash.new | |
17 | - s["db_version"] = "#{ActiveRecord::Migrator.current_version}" | |
18 | - s["backup_created_at"] = "#{Time.now}" | |
19 | - s["gitlab_version"] = %x{git rev-parse HEAD}.gsub(/\n/,"") | |
20 | - s["tar_version"] = %x{tar --version | head -1}.gsub(/\n/,"") | |
14 | + s = {} | |
15 | + s[:db_version] = "#{ActiveRecord::Migrator.current_version}" | |
16 | + s[:backup_created_at] = "#{Time.now}" | |
17 | + s[:gitlab_version] = %x{git rev-parse HEAD}.gsub(/\n/,"") | |
18 | + s[:tar_version] = %x{tar --version | head -1}.gsub(/\n/,"") | |
21 | 19 | |
22 | 20 | File.open("#{Gitlab.config.backup_path}/backup_information.yml", "w+") do |file| |
23 | 21 | file << s.to_yaml.gsub(/^---\n/,'') |
... | ... | @@ -32,7 +30,7 @@ namespace :gitlab do |
32 | 30 | end |
33 | 31 | |
34 | 32 | # cleanup: remove tmp files |
35 | - print "Deletion of tmp directories..." | |
33 | + print "Deleting tmp directories..." | |
36 | 34 | if Kernel.system("rm -rf repositories/ db/ backup_information.yml") |
37 | 35 | puts "[DONE]".green |
38 | 36 | else |
... | ... | @@ -52,26 +50,23 @@ namespace :gitlab do |
52 | 50 | else |
53 | 51 | puts "[SKIPPING]".yellow |
54 | 52 | end |
55 | - | |
56 | 53 | end |
57 | 54 | |
58 | - | |
59 | - # Restore backup of gitlab system | |
55 | + # Restore backup of GitLab system | |
60 | 56 | desc "GITLAB | Restore a previously created backup" |
61 | 57 | task :backup_restore => :environment do |
62 | - | |
63 | 58 | Dir.chdir(Gitlab.config.backup_path) |
64 | 59 | |
65 | 60 | # check for existing backups in the backup dir |
66 | 61 | file_list = Dir.glob("*_gitlab_backup.tar").each.map { |f| f.split(/_/).first.to_i } |
67 | - puts "no backup found" if file_list.count == 0 | |
62 | + puts "no backups found" if file_list.count == 0 | |
68 | 63 | if file_list.count > 1 && ENV["BACKUP"].nil? |
69 | 64 | puts "Found more than one backup, please specify which one you want to restore:" |
70 | 65 | puts "rake gitlab:app:backup_restore BACKUP=timestamp_of_backup" |
71 | 66 | exit 1; |
72 | 67 | end |
73 | 68 | |
74 | - tar_file = ENV["BACKUP"].nil? ? File.join(file_list.first.to_s + "_gitlab_backup.tar") : File.join(ENV["BACKUP"] + "_gitlab_backup.tar") | |
69 | + tar_file = ENV["BACKUP"].nil? ? File.join("#{file_list.first}_gitlab_backup.tar") : File.join(ENV["BACKUP"] + "_gitlab_backup.tar") | |
75 | 70 | |
76 | 71 | unless File.exists?(tar_file) |
77 | 72 | puts "The specified backup doesn't exist!" |
... | ... | @@ -102,16 +97,14 @@ namespace :gitlab do |
102 | 97 | Rake::Task["gitlab:app:repo_restore"].invoke |
103 | 98 | |
104 | 99 | # cleanup: remove tmp files |
105 | - print "Deletion of tmp directories..." | |
100 | + print "Deleting tmp directories..." | |
106 | 101 | if Kernel.system("rm -rf repositories/ db/ backup_information.yml") |
107 | 102 | puts "[DONE]".green |
108 | 103 | else |
109 | 104 | puts "[FAILED]".red |
110 | 105 | end |
111 | - | |
112 | 106 | end |
113 | 107 | |
114 | - | |
115 | 108 | ################################################################################ |
116 | 109 | ################################# invoked tasks ################################ |
117 | 110 | |
... | ... | @@ -121,7 +114,7 @@ namespace :gitlab do |
121 | 114 | backup_path_repo = File.join(Gitlab.config.backup_path, "repositories") |
122 | 115 | FileUtils.mkdir_p(backup_path_repo) until Dir.exists?(backup_path_repo) |
123 | 116 | puts "Dumping repositories:" |
124 | - project = Project.all.map { |n| [n.path,n.path_to_repo] } | |
117 | + project = Project.all.map { |n| [n.path, n.path_to_repo] } | |
125 | 118 | project << ["gitolite-admin.git", File.join(File.dirname(project.first.second), "gitolite-admin.git")] |
126 | 119 | project.each do |project| |
127 | 120 | print "- Dumping repository #{project.first}... " |
... | ... | @@ -136,11 +129,11 @@ namespace :gitlab do |
136 | 129 | task :repo_restore => :environment do |
137 | 130 | backup_path_repo = File.join(Gitlab.config.backup_path, "repositories") |
138 | 131 | puts "Restoring repositories:" |
139 | - project = Project.all.map { |n| [n.path,n.path_to_repo] } | |
132 | + project = Project.all.map { |n| [n.path, n.path_to_repo] } | |
140 | 133 | project << ["gitolite-admin.git", File.join(File.dirname(project.first.second), "gitolite-admin.git")] |
141 | 134 | project.each do |project| |
142 | 135 | print "- Restoring repository #{project.first}... " |
143 | - FileUtils.rm_rf(project.second) if File.dirname(project.second) # delet old stuff | |
136 | + FileUtils.rm_rf(project.second) if File.dirname(project.second) # delete old stuff | |
144 | 137 | if Kernel.system("cd #{File.dirname(project.second)} > /dev/null 2>&1 && git clone --bare #{backup_path_repo}/#{project.first}.bundle #{project.first}.git > /dev/null 2>&1") |
145 | 138 | permission_commands = [ |
146 | 139 | "sudo chmod -R g+rwX #{Gitlab.config.git_base_path}", |
... | ... | @@ -157,8 +150,9 @@ namespace :gitlab do |
157 | 150 | ###################################### DB ###################################### |
158 | 151 | |
159 | 152 | task :db_dump => :environment do |
160 | - backup_path_db = File.join(Gitlab.config.backup_path, "db") | |
161 | - FileUtils.mkdir_p(backup_path_db) until Dir.exists?(backup_path_db) | |
153 | + backup_path_db = File.join(Gitlab.config.backup_path, "db") | |
154 | + FileUtils.mkdir_p(backup_path_db) unless Dir.exists?(backup_path_db) | |
155 | + | |
162 | 156 | puts "Dumping database tables:" |
163 | 157 | ActiveRecord::Base.connection.tables.each do |tbl| |
164 | 158 | print "- Dumping table #{tbl}... " |
... | ... | @@ -176,9 +170,11 @@ namespace :gitlab do |
176 | 170 | end |
177 | 171 | |
178 | 172 | task :db_restore=> :environment do |
179 | - backup_path_db = File.join(Gitlab.config.backup_path, "db") | |
173 | + backup_path_db = File.join(Gitlab.config.backup_path, "db") | |
174 | + | |
180 | 175 | puts "Restoring database tables:" |
181 | 176 | Rake::Task["db:reset"].invoke |
177 | + | |
182 | 178 | Dir.glob(File.join(backup_path_db, "*.yml") ).each do |dir| |
183 | 179 | fixture_file = File.basename(dir, ".*" ) |
184 | 180 | print "- Loading fixture #{fixture_file}..." | ... | ... |
lib/tasks/gitlab/enable_automerge.rake
lib/tasks/gitlab/gitolite_rebuild.rake
1 | 1 | namespace :gitlab do |
2 | 2 | namespace :gitolite do |
3 | 3 | desc "GITLAB | Rebuild each project at gitolite config" |
4 | - task :update_repos => :environment do | |
4 | + task :update_repos => :environment do | |
5 | 5 | puts "Starting Projects" |
6 | 6 | Project.find_each(:batch_size => 100) do |project| |
7 | - puts | |
8 | - puts "=== #{project.name}" | |
7 | + puts "\n=== #{project.name}" | |
9 | 8 | project.update_repository |
10 | 9 | puts |
11 | 10 | end | ... | ... |
lib/tasks/gitlab/setup.rake
lib/tasks/gitlab/status.rake
1 | 1 | namespace :gitlab do |
2 | 2 | namespace :app do |
3 | - desc "GITLAB | Check gitlab installation status" | |
3 | + desc "GITLAB | Check GitLab installation status" | |
4 | 4 | task :status => :environment do |
5 | - puts "Starting diagnostic".yellow | |
5 | + puts "Starting diagnostics".yellow | |
6 | 6 | git_base_path = Gitlab.config.git_base_path |
7 | 7 | |
8 | 8 | print "config/database.yml............" |
9 | - if File.exists?(File.join Rails.root, "config", "database.yml") | |
9 | + if File.exists?(Rails.root.join "config", "database.yml") | |
10 | 10 | puts "exists".green |
11 | - else | |
11 | + else | |
12 | 12 | puts "missing".red |
13 | 13 | return |
14 | 14 | end |
15 | 15 | |
16 | 16 | print "config/gitlab.yml............" |
17 | - if File.exists?(File.join Rails.root, "config", "gitlab.yml") | |
18 | - puts "exists".green | |
17 | + if File.exists?(Rails.root.join "config", "gitlab.yml") | |
18 | + puts "exists".green | |
19 | 19 | else |
20 | 20 | puts "missing".red |
21 | 21 | return |
22 | 22 | end |
23 | 23 | |
24 | 24 | print "#{git_base_path}............" |
25 | - if File.exists?(git_base_path) | |
26 | - puts "exists".green | |
27 | - else | |
25 | + if File.exists?(git_base_path) | |
26 | + puts "exists".green | |
27 | + else | |
28 | 28 | puts "missing".red |
29 | 29 | return |
30 | 30 | end |
31 | 31 | |
32 | 32 | print "#{git_base_path} is writable?............" |
33 | 33 | if File.stat(git_base_path).writable? |
34 | - puts "YES".green | |
34 | + puts "YES".green | |
35 | 35 | else |
36 | 36 | puts "NO".red |
37 | 37 | return |
... | ... | @@ -41,16 +41,16 @@ namespace :gitlab do |
41 | 41 | `git clone #{Gitlab.config.gitolite_admin_uri} /tmp/gitolite_gitlab_test` |
42 | 42 | FileUtils.rm_rf("/tmp/gitolite_gitlab_test") |
43 | 43 | print "Can clone gitolite-admin?............" |
44 | - puts "YES".green | |
45 | - rescue | |
44 | + puts "YES".green | |
45 | + rescue | |
46 | 46 | print "Can clone gitolite-admin?............" |
47 | 47 | puts "NO".red |
48 | 48 | return |
49 | 49 | end |
50 | 50 | |
51 | 51 | print "UMASK for .gitolite.rc is 0007? ............" |
52 | - unless open("#{git_base_path}/../.gitolite.rc").grep(/UMASK([ \t]*)=([ \t>]*)0007/).empty? | |
53 | - puts "YES".green | |
52 | + if open("#{git_base_path}/../.gitolite.rc").grep(/UMASK([ \t]*)=([ \t>]*)0007/).any? | |
53 | + puts "YES".green | |
54 | 54 | else |
55 | 55 | puts "NO".red |
56 | 56 | return |
... | ... | @@ -69,16 +69,15 @@ namespace :gitlab do |
69 | 69 | end |
70 | 70 | end |
71 | 71 | |
72 | - | |
73 | - if Project.count > 0 | |
72 | + if Project.count > 0 | |
74 | 73 | puts "Validating projects repositories:".yellow |
75 | 74 | Project.find_each(:batch_size => 100) do |project| |
76 | 75 | print "#{project.name}....." |
77 | - hook_file = File.join(project.path_to_repo, 'hooks','post-receive') | |
76 | + hook_file = File.join(project.path_to_repo, 'hooks', 'post-receive') | |
78 | 77 | |
79 | 78 | unless File.exists?(hook_file) |
80 | - puts "post-receive file missing".red | |
81 | - next | |
79 | + puts "post-receive file missing".red | |
80 | + return | |
82 | 81 | end |
83 | 82 | |
84 | 83 | puts "post-receive file ok".green | ... | ... |
lib/tasks/gitlab/write_hook.rake
... | ... | @@ -4,7 +4,6 @@ namespace :gitlab do |
4 | 4 | task :write_hooks => :environment do |
5 | 5 | gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") |
6 | 6 | gitlab_hooks_path = Rails.root.join("lib", "hooks") |
7 | - | |
8 | 7 | gitlab_hook_files = ['post-receive'] |
9 | 8 | |
10 | 9 | gitlab_hook_files.each do |file_name| |
... | ... | @@ -20,4 +19,3 @@ namespace :gitlab do |
20 | 19 | end |
21 | 20 | end |
22 | 21 | end |
23 | - | ... | ... |