From a9c0d18a5ff8bf4ff0dff899ff28bd65b996df50 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 30 Apr 2021 15:36:14 +0800 Subject: [PATCH] add: gitea response process --- app/controllers/pull_requests_controller.rb | 4 ++-- app/services/gitea/client_service.rb | 19 +++++++++++++++++++ .../gitea/pull_request/merge_service.rb | 2 +- app/services/pull_requests/merge_service.rb | 6 +++--- config/gitea_response.yml | 7 +++++++ 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 config/gitea_response.yml diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 518ad91d9..0dbcdc942 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -149,12 +149,12 @@ class PullRequestsController < ApplicationController begin result = PullRequests::MergeService.call(@owner, @repository, @pull_request, current_user, params) - if result && @pull_request.merge! + if result.status == 200 && @pull_request.merge! @pull_request.project_trend_status! @issue&.custom_journal_detail("merge", "", "该合并请求已被合并", current_user&.id) normal_status(1, "合并成功") else - normal_status(-1, "合并失败") + normal_status(-1, result.message) end rescue => e normal_status(-1, e.message) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 1c13bc424..0ef041997 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -176,6 +176,25 @@ class Gitea::ClientService < ApplicationService [status, message, body] end + def render_gitea_response(response) + status = response.status + body = response&.body + + log_error(status, body) + message = nil + begin + translate = YAML.load(File.read('config/gitea_response.yml')) + + self.class.to_s.underscore.split("/").map{|i| translate=translate[i]} + message = body.nil? ? translate[status]['default'] : JSON.parse(body)['message'] + message = translate[status][message].nil? ? message : translate[status][message] + + return [status, message] + rescue + return [status, message] + end + end + def get_body_by_status(status, body) body, message = case status diff --git a/app/services/gitea/pull_request/merge_service.rb b/app/services/gitea/pull_request/merge_service.rb index c33c8781d..bdf2b23be 100644 --- a/app/services/gitea/pull_request/merge_service.rb +++ b/app/services/gitea/pull_request/merge_service.rb @@ -20,7 +20,7 @@ class Gitea::PullRequest::MergeService < Gitea::ClientService def call response = post(url, request_params) - render_200_no_body(response) + render_gitea_response(response) end private diff --git a/app/services/pull_requests/merge_service.rb b/app/services/pull_requests/merge_service.rb index a20ee3aa9..d5fc102ec 100644 --- a/app/services/pull_requests/merge_service.rb +++ b/app/services/pull_requests/merge_service.rb @@ -1,6 +1,6 @@ class PullRequests::MergeService < ApplicationService attr_reader :owner, :repo, :pull, :current_user, :params - + attr_accessor :status, :message # eq: # PullRequests::MergeService.call(owner, repo, pull, current_user, params) def initialize(owner, repo, pull, current_user, params) @@ -15,6 +15,7 @@ class PullRequests::MergeService < ApplicationService ActiveRecord::Base.transaction do gitea_pull_merge! end + self end private @@ -22,8 +23,7 @@ class PullRequests::MergeService < ApplicationService def gitea_pull_merge! result = Gitea::PullRequest::MergeService.call(@current_user.gitea_token, @owner.login, @repo.identifier, @pull.gpid, gitea_merge_pull_params) - - result[:status] === 200 ? true : false + @status, @message = result end def gitea_merge_pull_params diff --git a/config/gitea_response.yml b/config/gitea_response.yml new file mode 100644 index 000000000..1ff636ac0 --- /dev/null +++ b/config/gitea_response.yml @@ -0,0 +1,7 @@ +gitea: + pull_request: + merge_service: + 405: + default: "此合并请求有变更与目标分支冲突。" + 'User not allowed to merge PR': "用户没有合并请求的权限" + 403: