You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							179 lines
						
					
					
						
							5.5 KiB
						
					
					
				
			
		
		
	
	
							179 lines
						
					
					
						
							5.5 KiB
						
					
					
				| #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 |