diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 869f095dc..07691d79f 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -43,10 +43,10 @@ class CompareController < ApplicationController def load_compare_params # @base = Addressable::URI.unescape(params[:base]) - @base = Base64.decode64(params[:base]) + @base = params[:base].include?(":") ? Addressable::URI.unescape(params[:base].split(":")[0]) + ':' + Base64.decode64(params[:base].split(":")[1]) : Base64.decode64(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] # @head = Addressable::URI.unescape(@head) - @head = Base64.decode64(@head) + @head = @head.include?(":") ? Addressable::URI.unescape(@head.split(":")[0]) + ':' + Base64.decode64(@head.split(":")[1]) : Base64.decode64(@head) end def gitea_compare(base, head) diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index eaf931f38..4b814fd33 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -129,8 +129,10 @@ class PullRequests::CreateService < ApplicationService end def merge_original_pull_params + base_pull_params[:head] = CGI.escape(base_pull_params[:head]) + base_pull_params[:base] = CGI.escape(base_pull_params[:base]) if pull_request.is_original && @params[:merge_user_login] - base_pull_params.merge(head: "#{@params[:merge_user_login]}:#{@params[:head]}") + base_pull_params.merge(head: "#{@params[:merge_user_login]}:#{base_pull_params[:head]}") else base_pull_params end @@ -160,7 +162,7 @@ class PullRequests::CreateService < ApplicationService def compare_head_base! head = pull_request.is_original && @params[:merge_user_login] ? "#{@params[:merge_user_login]}/#{@project.identifier}:#{@params[:head]}" : @params[:head] - compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, @params[:base], head, @current_user.gitea_token) + compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, CGI.escape(@params[:base]), CGI.escape(head), @current_user.gitea_token) raise '分支内容相同,无需创建合并请求' if compare_result["Commits"].blank? && compare_result["Diff"].blank? end