From 96c67d359e02d6d58a2e5b7aa98bccfa86bb95e1 Mon Sep 17 00:00:00 2001 From: jasder Date: Wed, 10 Nov 2021 11:20:14 +0800 Subject: [PATCH] =?UTF-8?q?FIX=20=E5=8F=91=E9=80=81pr=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=88=86=E6=94=AF=E5=AF=B9=E6=AF=94=E5=8A=9F=E8=83=BD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0gitea=20=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81(pr=5Fmerg?= =?UTF-8?q?e=20api)=EF=BC=88bug=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/repositories/compare_service.rb | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 app/services/repositories/compare_service.rb diff --git a/app/services/repositories/compare_service.rb b/app/services/repositories/compare_service.rb new file mode 100644 index 00000000..c2e5df45 --- /dev/null +++ b/app/services/repositories/compare_service.rb @@ -0,0 +1,35 @@ +class Repositories::CompareService < ApplicationService + attr_reader :owner, :project, :params + + def initialize(owner, project, params) + @owner = owner + @project = project + @params = params + end + + def call + compare! + rescue => e + raise Error, e.message + end + + private + + def compare! + base, head = compare_params + + # TODO: 处理fork的项目向源项目发送PR的base、head参数问题 + head.include?(":") ? gitea_compare(base, head) : gitea_compare(head, base) + end + + def compare_params + base = Addressable::URI.unescape(params[:base]) + head = params[:head].include?('json') ? params[:head]&.split('.json')[0] : params[:head] + + [base, head] + end + + def gitea_compare(base, head) + Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, base, head) + end +end