namespace :gitlab do desc "make sure trustie'data consistent with gitlab's data" task :sync_data => :environment do s = Trustie::Gitlab::Sync.new g = Gitlab.client projects = Project.where("gpid is not null and status=?", 1) projects.each do |project| # sync members and roles begin if project.members.count != g.team_members(project.gpid).count project.members.each do |m| begin gid = m.user.gid if gid.nil? gid = s.sync_user(m.user).id end access_level = m.roles[0].position == 3 ? 40 : (m.roles[0].position == 4 ? 30 : 20) # sync project's members g.add_team_member(project.gpid, gid, access_level) # sync members' roles g.edit_team_member(project.gpid, gid, access_level) rescue Exception => e DataException.create(:message => e.message, :container_id => project.id, :container_type => "Project") puts e end end end rescue Exception => e puts e end end users = User.where("gid is not null and status =?", 1) users.each do |user| begin # sync username g.edit_user(user.gid, :username => user.login) if user.login != g.user(user.gid).try(:username) # sync email g.edit_user(user.gid, :email => user.mail) if user.mail != g.user(user.gid).try(:email) # sync password options = {:encrypted_password=> user.hashed_password, :password_salt=> user.salt} g.put("/users/ext/#{user.gid}", :body => options) rescue Exception => e puts e end end end end