#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: project.description, wiki_enabled: false, wall_enabled: false, issues_enabled: false, snippets_enabled: false, public: false, 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 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: project.description, 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