|
- #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: 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: 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
|