From bcab75e5d1ef549696038c9646a9fc447ed8b2b2 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 4 Jul 2023 16:07:19 +0800 Subject: [PATCH 01/15] fixed: user rank project owner changed remove rank --- app/views/user_rank/_detail.json.jbuilder | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/views/user_rank/_detail.json.jbuilder b/app/views/user_rank/_detail.json.jbuilder index d6c5c23ae..cb6692e07 100644 --- a/app/views/user_rank/_detail.json.jbuilder +++ b/app/views/user_rank/_detail.json.jbuilder @@ -25,11 +25,17 @@ if popular_project.blank? json.project nil else popular_project_common = $redis_cache.hgetall("v2-project-common:#{popular_project[0]}") - json.project do - json.id popular_project[0] - json.name popular_project_common["name"] - json.identifier popular_project_common["identifier"] - json.description popular_project_common["description"] + if popular_project_common["owner_id"].to_s == item[0].to_s + json.project do + json.id popular_project[0] + json.name popular_project_common["name"] + json.identifier popular_project_common["identifier"] + json.description popular_project_common["description"] + end + else + # owner changed remove rank + $redis_cache.zrem("v2-user-project-rank:#{item[0]}", popular_project[0]) + json.project nil end end From 1533e5e737d0d4d1a94a2c4c3d8852a690b1d184 Mon Sep 17 00:00:00 2001 From: chenjing Date: Tue, 4 Jul 2023 16:44:32 +0800 Subject: [PATCH 02/15] add fork to orgs --- app/controllers/forks_controller.rb | 34 ++++++++++++++++++++----- app/services/projects/fork_service.rb | 2 +- app/views/forks/fork_list.json.jbuilder | 16 ++++++++++++ config/routes.rb | 6 ++++- 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 app/views/forks/fork_list.json.jbuilder diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index 7d7db9350..6ad8db7c5 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -2,18 +2,40 @@ class ForksController < ApplicationController before_action :require_login before_action :require_profile_completed, only: [:create] before_action :load_project - before_action :authenticate_project!, :authenticate_user! + before_action :authenticate_user! + before_action :authenticate_project!, only: [:create] + + def fork_list + @user = current_user + @organizations = current_user.organizations + + end def create - @new_project = Projects::ForkService.new(current_user, @project, params[:organization], params[:new_name], params[:new_identifier]).call + target_owner = if params[:organization].present? && @organization + @organization + else + current_user + end + @new_project = Projects::ForkService.new(target_owner, @project, params[:organization], params[:new_name], params[:new_identifier]).call + if @new_project == false + render_result(-1, "已fork过一次该项目,无法再次进行fork") + end end private def authenticate_project! - if current_user&.id == @project.user_id && (params[:new_identifier].blank? || params[:new_identifier] == @project.identifier) - render_result(-1, "自己不能fork自己的项目") - elsif Project.exists?(user_id: current_user.id, identifier: (params[:new_identifier] || @project.identifier)) - render_result(0, "fork失败,你已拥有了这个项目") + if params[:organization].present? + return render_forbidden('参数错误,当organization存在时不允许fork重命名') if params[:new_identifier].present? || params[:new_name].present? + @organization = Organization.find_by(login:params[:organization]) + return render_forbidden('仓库不存在') unless @organization.present? + return render_forbidden('你没有权限操作') unless @organization.is_admin?(current_user.id) + end + + if params[:organization].blank? && Project.exists?(user_id: current_user.id, identifier: (params[:new_identifier] || @project.identifier)) + render_result(-1, "fork失败,您已拥有了这个项目") + elsif @organization && Project.exists?(user_id: [@organization.id], identifier: (params[:new_identifier] || @project.identifier)) + render_result(-1, "fork失败,组织已拥有了这个项目") end # return if current_user != @project.owner # render_result(-1, "自己不能fork自己的项目") diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 3e6a153fb..a46b8d86a 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -18,7 +18,7 @@ class Projects::ForkService < ApplicationService :license_id, :ignore_id, {repository: [:identifier, :hidden]}] result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization, @new_identifier).call - + return false if result['clone_url'].nil? clone_project.owner = @target_owner clone_project.forked_from_project_id = @project.id clone_project.gpid = result['id'] diff --git a/app/views/forks/fork_list.json.jbuilder b/app/views/forks/fork_list.json.jbuilder new file mode 100644 index 000000000..185b8e4fc --- /dev/null +++ b/app/views/forks/fork_list.json.jbuilder @@ -0,0 +1,16 @@ +json.user do + json.id @user.id + json.type @user.type + json.name @user.real_name + json.login @user.login + json.image_url url_to_avatar(@user) + json.forked Project.exists?(user_id: @user.id, forked_from_project_id: @project.id) +end +json.organizations @organizations do |organization| + json.forked Project.exists?(user_id: organization.id, forked_from_project_id: @project.id) + json.id organization.id + json.name organization.login + json.nickname organization.nickname.blank? ? organization.name : organization.nickname + json.avatar_url url_to_avatar(organization) + json.created_at organization.created_on.strftime("%Y-%m-%d") +end diff --git a/config/routes.rb b/config/routes.rb index 0d04c498a..8750508ea 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -625,7 +625,11 @@ Rails.application.routes.draw do end resources :hooks - resources :forks, only: [:create] + resources :forks, only: [:create] do + collection do + get :fork_list + end + end resources :project_trends, :path => :activity, only: [:index, :create] resources :issue_tags, :path => :labels, only: [:create, :edit, :update, :destroy, :index] resources :version_releases, :path => :releases, only: [:index,:new, :show, :create, :edit, :update, :destroy] From b7ab513efda061de6bdd4ddace7d78ff7ee05736 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 6 Jul 2023 16:06:19 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/interactors/gitea/update_file_interactor.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/interactors/gitea/update_file_interactor.rb b/app/interactors/gitea/update_file_interactor.rb index 38cfd98a8..0487a1ea0 100644 --- a/app/interactors/gitea/update_file_interactor.rb +++ b/app/interactors/gitea/update_file_interactor.rb @@ -42,6 +42,9 @@ module Gitea def render_result(response) if response.status == 200 @result = JSON.parse(response.body) + else + Rails.logger.info("Gitea::Repository::Entries::UpdateService error======#{response.body}") + @error = "更新失败" end end From 17934e55e5a4f9bf4aea3adc71800e86b4198b55 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 7 Jul 2023 10:04:48 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=B4=A1=E7=8C=AE?= =?UTF-8?q?=E6=8E=92=E8=A1=8C=E5=88=86=E9=A1=B5=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/api/v1/projects/contributors/stat_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/api/v1/projects/contributors/stat_service.rb b/app/services/api/v1/projects/contributors/stat_service.rb index d264a109b..9a4e88105 100644 --- a/app/services/api/v1/projects/contributors/stat_service.rb +++ b/app/services/api/v1/projects/contributors/stat_service.rb @@ -23,7 +23,7 @@ class Api::V1::Projects::Contributors::StatService < ApplicationService private def request_params param = { - access_token: token + access_token: token, page: page, limit: limit } param.merge!(branch: branch) if branch.present? param.merge!(pass_year: pass_year) if pass_year.present? From 3740ae31082c5e24a3250ef1d0890aeaafbe63e4 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 7 Jul 2023 14:23:32 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=B4=A1=E7=8C=AE?= =?UTF-8?q?=E6=8E=92=E8=A1=8C=E5=88=86=E9=A1=B5=E5=8F=82=E6=95=B03?= =?UTF-8?q?=E5=B9=B4=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/api/v1/projects/contributors/stat_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/api/v1/projects/contributors/stat_service.rb b/app/services/api/v1/projects/contributors/stat_service.rb index 9a4e88105..ab20dd657 100644 --- a/app/services/api/v1/projects/contributors/stat_service.rb +++ b/app/services/api/v1/projects/contributors/stat_service.rb @@ -6,7 +6,7 @@ class Api::V1::Projects::Contributors::StatService < ApplicationService def initialize(project, params, token=nil) @project = project @branch = params[:branch] - @pass_year = params[:pass_year] + @pass_year = params[:pass_year] || 3 @page = params[:page] || 1 @limit = params[:limit] || 15 @owner = project&.owner.login @@ -26,7 +26,7 @@ class Api::V1::Projects::Contributors::StatService < ApplicationService access_token: token, page: page, limit: limit } param.merge!(branch: branch) if branch.present? - param.merge!(pass_year: pass_year) if pass_year.present? + param.merge!(pass_year: @pass_year) param end From d1fc1c21f1dc45b364e3107a9070def3765b3719 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 7 Jul 2023 17:13:43 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E8=B4=A1=E7=8C=AE=E8=80=85=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 1fd61f438..e26559f74 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -176,6 +176,9 @@ class RepositoriesController < ApplicationController result = Gitea::Repository::Contributors::GetService.call(@owner, @repository.identifier, {page: params[:page], limit: params[:limit]}) @total_count = result[:total_count] @contributors = result.is_a?(Hash) ? result[:body] : [] + + add_contributors_count = EduSetting.get("ProjectAddContributors-#{@project.id}") + @total_count = @total_count + add_contributors_count.to_i end rescue @contributors = [] From b1e55baf36f4b31a3086b0e438c02f890cd3b99a Mon Sep 17 00:00:00 2001 From: xxq250 Date: Mon, 10 Jul 2023 14:01:40 +0800 Subject: [PATCH 07/15] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AEdetail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/_detail.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/_detail.json.jbuilder b/app/views/projects/_detail.json.jbuilder index e6f17924d..58cdbcc0c 100644 --- a/app/views/projects/_detail.json.jbuilder +++ b/app/views/projects/_detail.json.jbuilder @@ -3,7 +3,7 @@ json.identifier project.identifier json.name project.name json.description project.description json.is_public project.is_public -json.pr_need @project.owner.class == User ? false : @project.owner&.cla.try(:pr_need) +json.pr_need project.owner.class == User ? false : project.owner&.cla.try(:pr_need) json.owner do json.partial! "/users/user_simple", locals: {user: project.owner} end \ No newline at end of file From 86a583017bcf1661b421727b23d0796fd6d03cf1 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 11 Jul 2023 17:06:04 +0800 Subject: [PATCH 08/15] =?UTF-8?q?fixed=20diff=E6=8E=A5=E5=8F=A3=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=88=B0hat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- app/services/gitea/commit/diff_service.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5dc043a81..179f1a30a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1103,7 +1103,7 @@ class ApplicationController < ActionController::Base "author_time": commit['commit']['author']['date'], "committer_time": commit['commit']['committer']['date'], "content": commit['commit']['message'], - "commit_diff": commit_diff['Files'].to_s + "commit_diff": commit_diff.present? ? commit_diff['Files'].to_s : "" }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 7 diff --git a/app/services/gitea/commit/diff_service.rb b/app/services/gitea/commit/diff_service.rb index 712302505..76bba852a 100644 --- a/app/services/gitea/commit/diff_service.rb +++ b/app/services/gitea/commit/diff_service.rb @@ -16,7 +16,7 @@ class Gitea::Commit::DiffService < Gitea::ClientService end def call - response = get(url, params) + response = get(url, params, true) render_result(response) end From 5f3f9afbcea07ab9af21218c81c9dded9f4dae49 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 12 Jul 2023 15:22:32 +0800 Subject: [PATCH 09/15] Get gitea tokens --- app/services/gitea/user/get_token_service.rb | 21 +++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/app/services/gitea/user/get_token_service.rb b/app/services/gitea/user/get_token_service.rb index 22d9cc590..21a75a076 100644 --- a/app/services/gitea/user/get_token_service.rb +++ b/app/services/gitea/user/get_token_service.rb @@ -8,20 +8,17 @@ class Gitea::User::GetTokenService < Gitea::ClientService def call params = {} - url = "/users/#{username}".freeze - params = params.merge(data: request_params) - get(url, params) + url = "/users/#{username}/tokens".freeze + params = params.merge(page: 1, limit: 200, token: token) + response = get(url, params) + render_status(response) end private - # def token_params - # { - # username: username, - # password: password - # } - # end - - def request_params - { username: username } + def token + { + username: GiteaService.gitea_config[:access_key_id], + password: GiteaService.gitea_config[:access_key_secret] + } end end From 80321c6ca295e8470779b3ecd56aa87503dc2dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B1=E5=91=B1=E5=91=B1?= Date: Wed, 12 Jul 2023 15:55:56 +0800 Subject: [PATCH 10/15] add nickname with reversed_keywords --- app/controllers/users_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f292f9a70..bc91bb71b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -212,6 +212,7 @@ class UsersController < ApplicationController def update return render_not_found unless @user = User.find_by(login: params[:id]) || User.find_by_id(params[:id]) return render_forbidden unless User.current.logged? && (current_user&.admin? || current_user.id == @user.id) + return normal_status(-1, "昵称无法使用以下关键词:#{user_params[:nickname]},请重新命名") if ReversedKeyword.check_exists?(user_params[:nickname]) Util.write_file(@image, avatar_path(@user)) if user_params[:image].present? @user.attributes = user_params.except(:image) unless @user.save From 53135857fe5a96fc9f8809326cbd2f9426f0e8bb Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 12 Jul 2023 16:29:02 +0800 Subject: [PATCH 11/15] Get gitea tokens sudo --- app/services/gitea/user/get_token_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/gitea/user/get_token_service.rb b/app/services/gitea/user/get_token_service.rb index 21a75a076..d751ca9f4 100644 --- a/app/services/gitea/user/get_token_service.rb +++ b/app/services/gitea/user/get_token_service.rb @@ -9,7 +9,7 @@ class Gitea::User::GetTokenService < Gitea::ClientService def call params = {} url = "/users/#{username}/tokens".freeze - params = params.merge(page: 1, limit: 200, token: token) + params = params.merge(sudo: username, page: 1, limit: 200, token: token) response = get(url, params) render_status(response) end From 8b1857a3d89ca20ca3d5af6d4d6f6a70e2bc49db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B1=E5=91=B1=E5=91=B1?= Date: Thu, 13 Jul 2023 10:56:44 +0800 Subject: [PATCH 12/15] fix fork error when exit repo and fix emoj for nickname bug --- app/controllers/forks_controller.rb | 9 +++++++++ app/controllers/users_controller.rb | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index 6ad8db7c5..ba36871cf 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -36,6 +36,10 @@ class ForksController < ApplicationController render_result(-1, "fork失败,您已拥有了这个项目") elsif @organization && Project.exists?(user_id: [@organization.id], identifier: (params[:new_identifier] || @project.identifier)) render_result(-1, "fork失败,组织已拥有了这个项目") + elsif gitea_check_exit(current_user) + render_result(-1, "fork失败,仓库底层数据出现了问题") + elsif @organization && gitea_check_exit(@organization) + render_result(-1, "fork失败,fork失败,仓库底层数据出现了问题") end # return if current_user != @project.owner # render_result(-1, "自己不能fork自己的项目") @@ -46,4 +50,9 @@ class ForksController < ApplicationController return if @project.member?(current_user) || current_user.admin? render_forbidden('你没有权限操作') end + + def gitea_check_exit(user) + data = Gitea::Repository::GetService.new(user, params[:new_identifier] || @project.identifier)).call + data.present? + end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index bc91bb71b..25c8ce570 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -212,7 +212,8 @@ class UsersController < ApplicationController def update return render_not_found unless @user = User.find_by(login: params[:id]) || User.find_by_id(params[:id]) return render_forbidden unless User.current.logged? && (current_user&.admin? || current_user.id == @user.id) - return normal_status(-1, "昵称无法使用以下关键词:#{user_params[:nickname]},请重新命名") if ReversedKeyword.check_exists?(user_params[:nickname]) + keywords = user_params[:nickname].to_s.each_char.select { |c| c.bytes.first < 240 }.join('') + return normal_status(-1, "昵称中包含关键词:#{keywords},请重新命名") if ReversedKeyword.check_exists?(keywords) Util.write_file(@image, avatar_path(@user)) if user_params[:image].present? @user.attributes = user_params.except(:image) unless @user.save From 5d31401d7e03d5400a7ed9194673b02b09b444a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B1=E5=91=B1=E5=91=B1?= Date: Thu, 13 Jul 2023 11:02:23 +0800 Subject: [PATCH 13/15] fix --- app/controllers/forks_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index ba36871cf..4815ca961 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -38,7 +38,7 @@ class ForksController < ApplicationController render_result(-1, "fork失败,组织已拥有了这个项目") elsif gitea_check_exit(current_user) render_result(-1, "fork失败,仓库底层数据出现了问题") - elsif @organization && gitea_check_exit(@organization) + elsif @organization && gitea_check_exit(@organization) render_result(-1, "fork失败,fork失败,仓库底层数据出现了问题") end # return if current_user != @project.owner @@ -52,7 +52,7 @@ class ForksController < ApplicationController end def gitea_check_exit(user) - data = Gitea::Repository::GetService.new(user, params[:new_identifier] || @project.identifier)).call + data = Gitea::Repository::GetService.new(user, params[:new_identifier]|| @project.identifier).call data.present? end end From 101534d8fdedd85b3b5ca8a7caa135c02967349f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B1=E5=91=B1=E5=91=B1?= Date: Thu, 13 Jul 2023 11:11:13 +0800 Subject: [PATCH 14/15] change text --- app/controllers/forks_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index 4815ca961..967c1d4d2 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -37,9 +37,9 @@ class ForksController < ApplicationController elsif @organization && Project.exists?(user_id: [@organization.id], identifier: (params[:new_identifier] || @project.identifier)) render_result(-1, "fork失败,组织已拥有了这个项目") elsif gitea_check_exit(current_user) - render_result(-1, "fork失败,仓库底层数据出现了问题") + render_result(-1, "fork失败,请联系系统管理员") elsif @organization && gitea_check_exit(@organization) - render_result(-1, "fork失败,fork失败,仓库底层数据出现了问题") + render_result(-1, "fork失败,请联系系统管理员") end # return if current_user != @project.owner # render_result(-1, "自己不能fork自己的项目") From 97861afef97060723ba821da02ec542b57a4dda4 Mon Sep 17 00:00:00 2001 From: chenjing <28122123@qq.com> Date: Fri, 14 Jul 2023 10:50:51 +0800 Subject: [PATCH 15/15] change compare_head_base --- app/services/pull_requests/create_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index 2b4767f31..070b564d9 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -180,7 +180,7 @@ class PullRequests::CreateService < ApplicationService end def compare_head_base! - head = pull_request.is_original && @params[:merge_user_login] ? "#{@params[:merge_user_login]}/#{@project.identifier}:#{@params[:head]}" : @params[:head] + head = pull_request.is_original && @params[:merge_user_login] ? "#{@params[:merge_user_login]}/#{@params[:merge_project_identifier]}:#{@params[:head]}" : @params[:head] compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, Addressable::URI.escape(@params[:base]), Addressable::URI.escape(head), @current_user.gitea_token) raise '分支内容相同,无需创建合并请求' if compare_result["Commits"].blank? && compare_result["Diff"].blank? end