# 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