58 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# 执行示例  bundle exec rake sync_forge_gitea:created_repo
 | 
						|
# 线上环境执行示例  RAILS_ENV=production bundle exec rake sync_forge_gitea:created_repo
 | 
						|
 | 
						|
namespace :sync_forge_gitea do
 | 
						|
  desc "if gitea .git file not present ,and create new .git file"
 | 
						|
 | 
						|
  task created_repo: :environment do
 | 
						|
 | 
						|
    ##这个方法是更新 project的identifier 不等于 repository的identifier的问题
 | 
						|
 | 
						|
    # all_projects = Project.joins(:repository).where("projects.identifier != repositories.identifier").includes(:repository)
 | 
						|
    # all_projects.each do |project|
 | 
						|
    #   project.update_attribute(:identifier, project.repository.identifier)
 | 
						|
    # end
 | 
						|
 | 
						|
    #下述方法是更新 gitea记录存在但是 forge上没有创建 gitea的问题
 | 
						|
    puts "__________begin_to_create_repository_git___________"
 | 
						|
    all_repositories = Repository.select(:id,:identifier, :user_id,:hidden,:project_id,:url).includes(project: :owner)
 | 
						|
    success_ids = all_repositories.where("url like ?", "%gitea.trustie.net%").pluck(:id)
 | 
						|
    failed_repos = all_repositories.where.not(id: success_ids)
 | 
						|
    failed_repos.find_each do |r|
 | 
						|
      project = r.project
 | 
						|
      user = project.owner
 | 
						|
      unless r.url.to_s.include?("gitea.trustie.net")
 | 
						|
        if user && user.try(:gitea_token).present?
 | 
						|
          repo_status = Gitea::Repository::GetService.new(user, r.identifier).call
 | 
						|
          if repo_status.present?
 | 
						|
            r.update_attribute(:url, repo_status["clone_url"])
 | 
						|
            project.update_attributes(gpid: repo_status["id"],identifier: r.identifier)
 | 
						|
          else
 | 
						|
            ActiveRecord::Base.transaction do
 | 
						|
              repository_params= {
 | 
						|
                name: r.identifier,
 | 
						|
                auto_init: true,
 | 
						|
                private: r.hidden,
 | 
						|
              }
 | 
						|
              begin
 | 
						|
                gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, repository_params).call
 | 
						|
                if gitea_repository
 | 
						|
                  r.update_attribute(:url, gitea_repository["clone_url"])
 | 
						|
                  project.update_attributes(gpid: repo_status["id"],identifier: r.identifier)
 | 
						|
 | 
						|
                end
 | 
						|
                Rails.logger.info( "__________after_create_gitea_repository_____#{gitea_repository}______")
 | 
						|
 | 
						|
              rescue => e
 | 
						|
                Rails.logger.info( "_________create_gitea_git________file______error: #{e}")
 | 
						|
              end
 | 
						|
            end
 | 
						|
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
    puts "__________end_to_create_repository_git___________"
 | 
						|
  end
 | 
						|
 | 
						|
end |