From 6f458e0e791038307089cc1e863315becba2cddc Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 18 Apr 2024 15:20:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=A7=A3=E7=BB=91?= =?UTF-8?q?=E5=92=8C=E6=9B=B4=E6=94=B9=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projects/sync_repositories_controller.rb | 33 +++++++++++++++++-- .../sync_repositories/create_service.rb | 2 +- .../sync_repositories/branches.json.jbuilder | 4 +-- config/routes/api.rb | 2 ++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/projects/sync_repositories_controller.rb b/app/controllers/api/v1/projects/sync_repositories_controller.rb index e344f3ec9..9586b2c2d 100644 --- a/app/controllers/api/v1/projects/sync_repositories_controller.rb +++ b/app/controllers/api/v1/projects/sync_repositories_controller.rb @@ -11,8 +11,9 @@ class Api::V1::Projects::SyncRepositoriesController < Api::V1::BaseController end def sync - @sync_repositories = SyncRepository.where(project: @project) - @sync_repository_branches = SyncRepositoryBranch.where(sync_repository_id: @sync_repositories) + return render_error("请输入正确的同步方向!") if params[:sync_direction].blank? + @sync_repositories = SyncRepository.where(project: @project, sync_direction: params[:sync_direction]) + @sync_repository_branches = SyncRepositoryBranch.where(sync_repository_id: @sync_repositories, enable: true) @sync_repositories.each do |item| TouchSyncJob.perform_later(item) end @@ -21,6 +22,34 @@ class Api::V1::Projects::SyncRepositoriesController < Api::V1::BaseController end end + def unbind + return render_error("请输入正确的同步项目ID") unless params[:sync_repository_ids].present? + @sync_repositories = SyncRepository.where(id: params[:sync_repository_ids].split(",")) + @sync_repositories.each do |repo| + Reposync::DeleteRepoService.call(repo.repo_name) + repo.destroy + end + render_ok + end + + def change_enable + return render_error("请输入正确的分支名称") if params[:gitlink_branch_name].blank? || params[:external_branch_name].blank? + return render_error("请输入正确的状态") if params[:enable].blank? + @sync_repository_branches = SyncRepositoryBranch.where(gitlink_branch_name: params[:gitlink_branch_name], external_branch_name: params[:external_branch_name]) + if @sync_repository_branches.update_all({enable: params[:enable]}) + @sync_repository_branches.each do |branch| + if branch&.sync_repository&.sync_direction.to_i == 1 + Reposync::UpdateBranchStatusService.call(branch&.sync_repository&.repo_name, branch.gitlink_branch_name, params[:enable]) + else + Reposync::UpdateBranchStatusService.call(branch&.sync_repository&.repo_name, branch.external_branch_name, params[:enable]) + end + end + render_ok + else + render_error("更新失败!") + end + end + def branches return render_error("请输入正确的同步项目ID") unless params[:sync_repository_ids].present? @sync_repository_branches = SyncRepositoryBranch.where(sync_repository_id: params[:sync_repository_ids].split(",")) diff --git a/app/services/api/v1/projects/sync_repositories/create_service.rb b/app/services/api/v1/projects/sync_repositories/create_service.rb index 37dda551a..1e1c361e6 100644 --- a/app/services/api/v1/projects/sync_repositories/create_service.rb +++ b/app/services/api/v1/projects/sync_repositories/create_service.rb @@ -75,7 +75,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService active: true, branch_filter: '*', http_method: 'POST', - url: "#{Rails.application.config_for(:configuration)['platform_url']}/api/v1/#{project&.owner&.login}/#{project&.identifier}/sync_repositories/sync", + url: "#{Rails.application.config_for(:configuration)['platform_url']}/api/v1/#{project&.owner&.login}/#{project&.identifier}/sync_repositories/sync?sync_direction=1", content_type: 'json', type: 'reposync', events: ["push"] diff --git a/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder b/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder index 5a2c41aa4..4f548ee1a 100644 --- a/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder +++ b/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder @@ -2,8 +2,8 @@ json.total_count @group_sync_repository_branch.keys.count json.sync_repository_branches @group_sync_repository_branch.each do |key| json.gitlink_branch_name key[0][0] json.external_branch_name key[0][1] - branches = @sync_repository_branches.where(gitlink_branch_name: key[0][0], external_branch_name: key[0][1]) - branch = branches.last + branches = @sync_repository_branches.where(gitlink_branch_name: key[0][0], external_branch_name: key[0][1]).order(updated_at: :desc) + branch = branches.first json.sync_time branch.sync_time json.sync_status branch.sync_status json.enable branch.enable diff --git a/config/routes/api.rb b/config/routes/api.rb index d02967481..762672bdc 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -82,6 +82,8 @@ defaults format: :json do collection do post :sync get :branches + post :change_enable + post :unbind end end resource :dataset, only: [:create, :update, :show]