|
|
require 'trustie/gitlab/sync'
|
|
|
|
|
|
namespace :gitlab do
|
|
|
namespace :sync do
|
|
|
desc "sync users to gitlab"
|
|
|
task :users => :environment do
|
|
|
# User.where(username: 'root').find_each do |user|
|
|
|
s = Trustie::Gitlab::Sync.new
|
|
|
User.find_each do |user|
|
|
|
s.sync_user(user)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
task :members => :environment do
|
|
|
projects = Project.where("gpid is not null")
|
|
|
s = Trustie::Gitlab::Sync.new
|
|
|
g = Gitlab.client
|
|
|
projects.each do |project|
|
|
|
begin
|
|
|
if project.members.count != g.team_members(project.gpid).count
|
|
|
s.only_members(project)
|
|
|
end
|
|
|
rescue => e
|
|
|
puts e
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 检查一个gitlab用户对应多个trustie用户的问题
|
|
|
task :useless_user => :environment do
|
|
|
# projects = Project.where(:id => [6286, 6292, 6293, 6294])
|
|
|
ids = User.find_by_sql("select gid from users where gid is not null group by gid having count(gid) > 1").map(&:gid)
|
|
|
users = User.where(:gid => ids)
|
|
|
g = Gitlab.client
|
|
|
# users = User.where(:gid => 8823)
|
|
|
users.each do |user|
|
|
|
puts "start"+ "#{user.id}"
|
|
|
# 保证用户没有创建过项目、实训及TPI实战
|
|
|
if (Member.where("project_id >0 and user_id =?", user.id).blank? || g.user(user.gid).try(:username) != user.login) && user.id < 11360
|
|
|
puts user.id
|
|
|
user.update_column(:gid, nil)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 需要查出这样的用户,并且删除Gitlab中这样的用户
|
|
|
task :sigle_useless_user => :environment do
|
|
|
users = User.where("gid is not null")
|
|
|
g = Gitlab.client
|
|
|
# users = User.where(:gid => 8823)
|
|
|
users.find_each do |user|
|
|
|
# 没有创建或者加入过项目
|
|
|
if Member.where("project_id >0 and user_id =?", user.id).blank? && g.user(user.gid).try(:username) != user.login
|
|
|
puts user.id
|
|
|
g.delete_user(user.gid)
|
|
|
user.update_column(:gid, nil)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 检查gitlab中username和trustie不一致的问题
|
|
|
# 不一致的问题有一些是特殊符号导致的,比如:@、.等
|
|
|
task :username => :environment do
|
|
|
# projects = Project.where(:id => [6286, 6292, 6293, 6294])
|
|
|
users = User.where("gid is not null")
|
|
|
g = Gitlab.client
|
|
|
# users = User.where(:gid => 8823)
|
|
|
users.find_each do |user|
|
|
|
if g.user(user.gid).try(:username) != user.login
|
|
|
puts "start"+ "#{user.id}"
|
|
|
g.edit_user(user.gid, :username => user.login)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 修复邮箱不一致的问题
|
|
|
task :mail => :environment do
|
|
|
users = User.where("gid is not null")
|
|
|
g = Gitlab.client
|
|
|
# users = User.where(:gid => 8823)
|
|
|
users.find_each do |user|
|
|
|
if g.user(user.gid).try(:email) != user.mail
|
|
|
puts "start"+ "#{user.id}"
|
|
|
g.edit_user_mail(user.gid, :email => user.mail)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
desc "update user password"
|
|
|
task :password => :environment do
|
|
|
s = Trustie::Gitlab::Sync.new
|
|
|
s.change_password(1,'5188b7a65acf294ee7deceb397b6f9c62214ea50','dcb8d9fffabec60c2d0d1030b679fbbb')
|
|
|
end
|
|
|
|
|
|
desc "sync projects to gitlab"
|
|
|
task :projects => :environment do
|
|
|
s = Trustie::Gitlab::Sync.new
|
|
|
Project.where(id: ENV["PROJECT_ID"]).find_each do |project|
|
|
|
s.sync_project(project, path: ENV["REP_NAME"], import_url: project.repository.url)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
desc "remove all projects"
|
|
|
task :remove_all_projects => :environment do
|
|
|
g = Gitlab.client
|
|
|
100.times do
|
|
|
g.projects(scope: 'all').each do |p|
|
|
|
puts p.id
|
|
|
begin
|
|
|
g.delete_project(p.id)
|
|
|
rescue => e
|
|
|
puts e
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
end
|
|
|
end
|