From c58ca88edd7b180683b766c1f23109f2f19bb290 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 3 Jun 2024 10:36:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admins/projects_controller.rb | 2 +- app/controllers/projects_controller.rb | 21 ++++++++++++++++++- app/jobs/check_mirror_job.rb | 2 +- app/jobs/migrate_remote_repository_job.rb | 13 +++++++++++- .../gitea/repository/delete_service.rb | 7 ++++--- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/controllers/admins/projects_controller.rb b/app/controllers/admins/projects_controller.rb index dc3f6030a..926ab8a29 100644 --- a/app/controllers/admins/projects_controller.rb +++ b/app/controllers/admins/projects_controller.rb @@ -32,7 +32,7 @@ class Admins::ProjectsController < Admins::BaseController def destroy project = Project.find_by!(id: params[:id]) ActiveRecord::Base.transaction do - Gitea::Repository::DeleteService.new(project.owner, project.identifier).call + Gitea::Repository::DeleteService.new(project.owner, project.identifier, current_user.gitea_token).call project.destroy! # render_delete_success UserAction.create(action_id: project.id, action_type: "DestroyProject", user_id: current_user.id, :ip => request.remote_ip, data_bank: project.attributes.to_json) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index d7a0396a1..e57826f3c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -255,7 +255,7 @@ class ProjectsController < ApplicationController def destroy if current_user.admin? || @project.manager?(current_user) ActiveRecord::Base.transaction do - Gitea::Repository::DeleteService.new(@project.owner, @project.identifier).call + Gitea::Repository::DeleteService.new(@project.owner, @project.identifier,current_user.gitea_token).call @project.destroy! @project.forked_projects.update_all(forked_from_project_id: nil) # 如果该项目有所属的项目分类以及为私有项目,需要更新对应数量 @@ -305,6 +305,25 @@ class ProjectsController < ApplicationController end def simple + if !@project.common? && @project&.repository&.mirror&.waiting? + gitea_result = $gitea_client.get_repos_by_owner_repo(@project&.owner&.login, @project&.identifier) + if !gitea_result["empty"] + @project&.update_columns(gpid: gitea_result["id"]) + @project&.repository&.mirror&.succeeded! + project_id = @project&.id + user_id = @project&.owner&.id + puts "############ mirror project_id,user_id: #{project_id},#{user_id} ############" + OpenProjectDevOpsJob.set(wait: 5.seconds).perform_later(project_id, user_id) if project_id.present? && user_id.present? + UpdateProjectTopicJob.set(wait: 1.seconds).perform_later(project_id) if project_id.present? + puts "############ mirror status: #{repo.mirror.status} ############" + end + elsif !@project.common? && @project&.repository&.mirror&.failed? + Gitea::Repository::DeleteService.new(@project.owner, @project.identifier,current_user.gitea_token).call + @project.destroy! + @project.forked_projects.update_all(forked_from_project_id: nil) + # 如果该项目有所属的项目分类以及为私有项目,需要更新对应数量 + @project.project_category.decrement!(:private_projects_count, 1) if @project.project_category.present? && !@project.is_public + end # 为了缓存活跃项目的基本信息,后续删除 Cache::V2::ProjectCommonService.new(@project.id).read # 项目名称,标识,所有者变化时重置缓存 diff --git a/app/jobs/check_mirror_job.rb b/app/jobs/check_mirror_job.rb index 9854110b8..7de7cbd1b 100644 --- a/app/jobs/check_mirror_job.rb +++ b/app/jobs/check_mirror_job.rb @@ -11,7 +11,7 @@ class CheckMirrorJob < ApplicationJob unless response.present? SyncLog.sync_log("==========check_project_error_id:#{project.id}============") ActiveRecord::Base.transaction do - delete_gitea = Gitea::Repository::DeleteService.new(project.owner, project.identifier).call + delete_gitea = Gitea::Repository::DeleteService.new(project.owner, project.identifier, project.owner.gitea_token).call if delete_gitea.status == 204 || delete_gitea.status == 404 #删除成功或者仓库不存在,都重新创建 repository_params= { name: project.identifier, diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 2493bff01..cc3cdf4a9 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -19,7 +19,18 @@ class MigrateRemoteRepositoryJob < ApplicationJob UpdateProjectTopicJob.set(wait: 1.seconds).perform_later(project_id) if project_id.present? puts "############ mirror status: #{repo.mirror.status} ############" else - repo&.mirror&.failed! + gitea_result = $gitea_client.get_repos_by_owner_repo(repo&.project&.owner&.login, repo&.project&.identifier) + if gitea_result["empty"] + repo&.mirror&.failed! + else + repo&.project&.update_columns(gpid: gitea_result["id"]) + repo&.mirror&.succeeded! + project_id = repo&.project&.id + puts "############ mirror project_id,user_id: #{project_id},#{user_id} ############" + OpenProjectDevOpsJob.set(wait: 5.seconds).perform_later(project_id, user_id) if project_id.present? && user_id.present? + UpdateProjectTopicJob.set(wait: 1.seconds).perform_later(project_id) if project_id.present? + puts "############ mirror status: #{repo.mirror.status} ############" + end end # UpdateProjectTopicJob 中语言要延迟1S才能获取 BroadcastMirrorRepoMsgJob.set(wait: 1.seconds).perform_later(repo.id) unless repo&.mirror.waiting? diff --git a/app/services/gitea/repository/delete_service.rb b/app/services/gitea/repository/delete_service.rb index eee6ca6d6..c5d5c1b50 100644 --- a/app/services/gitea/repository/delete_service.rb +++ b/app/services/gitea/repository/delete_service.rb @@ -1,9 +1,10 @@ class Gitea::Repository::DeleteService < Gitea::ClientService - attr_reader :user, :repo_name + attr_reader :user, :repo_name, :token - def initialize(user, repo_name) + def initialize(user, repo_name, token=nil) @user = user @repo_name = repo_name + @token = token end def call @@ -13,7 +14,7 @@ class Gitea::Repository::DeleteService < Gitea::ClientService private def params - Hash.new.merge(token: user.gitea_token) + Hash.new.merge(token: token) end def url