#coding=utf-8 require_relative 'helper' module Trustie module Gitlab module UserLevel GUEST = 10 REPORTER = 20 DEVELOPER = 30 MASTER = 40 OWNER = 50 # 项目公开和私有 PUBLIC = 20 PRIVATE = 0 end class Sync attr :g include Helper def initialize @g = ::Gitlab.client end def sync_user(user) u = add_user(user) if (!("day,none,all".include? user.mail_notification) or user.mail_notification.blank?) user.mail_notification = "day" end user.save! u end def create_project(project, repository) gid = project.owner.gid unless gid gid = sync_user(project.owner).id end raise "unknow gid" unless gid gproject = g.create_project(repository.identifier, path: repository.identifier, description: false, wiki_enabled: false, wall_enabled: false, issues_enabled: false, snippets_enabled: false, public: true, user_id: gid, visibility_level: project.is_public? ? UserLevel::PUBLIC : UserLevel::PRIVATE ) project.gpid = gproject.id project.save! # 创建的时候一并同步成员及角色 project.members.each do |m| begin gid = m.user.gid unless gid gid = sync_user(m.user).id end self.g.add_team_member(gproject.id, gid, get_gitlab_role(m)) rescue => e puts e end end project end def create_shixun(shixun, repository) user = User.find_by_mail("educoder@163.com") gid = user.gid unless gid gid = sync_user(user).id end raise "unknow gid" unless gid gshixun = g.create_project(repository.identifier, path: repository.identifier, description: false, wiki_enabled: false, wall_enabled: false, issues_enabled: false, snippets_enabled: false, public: false, user_id: gid, visibility_level: UserLevel::PUBLIC ) shixun.gpid = gshixun.id shixun.save! # 创建的时候一并同步成员及角色 shixun.shixun_members.each do |m| begin gid = m.user.gid unless gid gid = sync_user(m.user).id end self.g.add_team_member(gshixun.id, gid, shixun_gitlab_role(m.role)) rescue => e puts e end end end def sync_project(project, opt={}) gid = project.owner.gid unless gid gid = sync_user(project.owner).id end raise "unknow gid" unless gid path = opt[:path] raise "unknow path" unless path import_url = opt[:import_url] raise "unknow import_url" unless import_url if opt[:password] import_url.sub('@', ":#{opt[:password]}@") end # import url http://xianbo_trustie2:1234@repository.trustie.net/xianbo/trustie2.git # can use password gproject = self.g.create_project(path, path: path, description: false, wiki_enabled: false, wall_enabled: false, issues_enabled: false, snippets_enabled: false, merge_requests_enabled: true, public: false, user_id: gid, import_url: import_url, visibility_level: project.is_public? ? UserLevel::PUBLIC : UserLevel::PRIVATE ) project.gpid = gproject.id project.save! puts "Successfully created #{project.name}" # add team members # project.members.each do |m| begin gid = m.user.gid unless gid gid = sync_user(m.user).id end self.g.add_team_member(gproject.id, gid, get_gitlab_role(m)) rescue => e puts e end end end def only_members(project) project.members.each do |m| begin gid = m.user.gid if gid.nil? gid = sync_user(m.user).id end self.g.add_team_member(project.gpid, gid, get_gitlab_role(m)) rescue => e puts e end end end def remove_project end end end end