From 56103a885b24398f90fd20d1d013483c92add028 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 22 Aug 2023 13:47:34 +0800 Subject: [PATCH 01/10] =?UTF-8?q?fixed=20fork=E5=90=8E=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E9=A1=B9=E7=9B=AE=E6=A0=87=E8=AF=86=E5=86=8Dforked?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/forks_controller.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index 0842d2e67..8215192f2 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -12,6 +12,10 @@ class ForksController < ApplicationController def authenticate_project! if current_user&.id == @project.user_id render_result(-1, "自己不能fork自己的项目") + elsif @project.fork_users.where(user_id: current_user.id).present? + fork = @project.fork_users.find_by(user_id: current_user.id) + render json: { status: 0, id: fork.fork_project_id, identifier: fork.fork_project&.identifier, message: "fork失败,你已拥有了这个项目 #{fork.fork_project&.identifier}" } + return elsif Project.exists?(user_id: current_user.id, identifier: @project.identifier) render_result(0, "fork失败,你已拥有了这个项目") end From 1d1d6ebda130a172aa0a110d21f52ab5bb823353 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 22 Aug 2023 13:59:02 +0800 Subject: [PATCH 02/10] =?UTF-8?q?fixed=20=E6=B3=A8=E5=86=8C=E6=97=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=AD=E5=88=92=E7=BA=BF=E7=9A=84=E9=82=AE?= =?UTF-8?q?=E7=AE=B1=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 179f1a30a..8981a0995 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -81,7 +81,7 @@ class ApplicationController < ActionController::Base # 判断用户的邮箱或者手机是否可用 # params[:type] 1: 注册;2:忘记密码;3:绑定 def check_mail_and_phone_valid login, type - unless login =~ /^[a-zA-Z0-9]+([._\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/ || login =~ /^1\d{10}$/ + unless login =~ /\A[a-zA-Z0-9]+([._\-\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+\z/ || login =~ /^1\d{10}$/ tip_exception(-2, "请输入正确的手机号或邮箱") end From f47c4e4b9c782078424e0e69e87232a6729555ee Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 29 Aug 2023 14:43:15 +0800 Subject: [PATCH 03/10] gitea api error show --- app/services/gitea/client_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 5418be159..10b320c38 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -256,6 +256,7 @@ class Gitea::ClientService < ApplicationService end def error(message, http_status = nil) + Rails.logger.error("@url==#{@url}==error:#{message}") result = { message: message, status: :error From 2e15988ad6128981f74b84c299294c93dfd4ea5b Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 29 Aug 2023 14:53:44 +0800 Subject: [PATCH 04/10] gitea api error log show --- app/services/gitea/client_service.rb | 1 - app/services/gitea/repository/entries/create_service.rb | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 10b320c38..5418be159 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -256,7 +256,6 @@ class Gitea::ClientService < ApplicationService end def error(message, http_status = nil) - Rails.logger.error("@url==#{@url}==error:#{message}") result = { message: message, status: :error diff --git a/app/services/gitea/repository/entries/create_service.rb b/app/services/gitea/repository/entries/create_service.rb index 14b373335..e10dcadc6 100644 --- a/app/services/gitea/repository/entries/create_service.rb +++ b/app/services/gitea/repository/entries/create_service.rb @@ -61,7 +61,9 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService else error("#{filepath}文件已存在,不能重复创建!") end - else error("系统错误!") + else + Rails.logger.error("Gitea api url==#{url},status:#{status},body=#{body}") + error("系统错误!") end end end From 1da6c582f00d6c9060c01b58f3a4a83a15de7f66 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 30 Aug 2023 13:51:56 +0800 Subject: [PATCH 05/10] =?UTF-8?q?fixed=20=E5=88=86=E6=94=AF=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=B6=E6=9C=89=E5=BC=80=E5=90=AF=E7=9A=84pr?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=B8=80=E5=90=8C=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/projects/branches_controller.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index 0c89f6012..bd219c23a 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -17,7 +17,14 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController def destroy @result_object = Api::V1::Projects::Branches::DeleteService.call(@project, params[:name], current_user&.gitea_token) - if @result_object + if @result_object + # 有开启的pr需要一同关闭 + open_pull_requests = @project.pull_requests.opening.where(head: params[:name]).where(user_id: current_user.id) + if open_pull_requests.present? + open_pull_requests.each do |pull_request| + PullRequests::CloseService.call(@project.owner, @project.repository, pull_request, current_user) + end + end return render_ok else return render_error('删除分支失败!') From 04c147d80ddf95ec14e7a4306793a790bcb17234 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 30 Aug 2023 13:55:57 +0800 Subject: [PATCH 06/10] =?UTF-8?q?fixed=20=E5=88=86=E6=94=AF=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=B6=E6=9C=89=E5=BC=80=E5=90=AF=E7=9A=84pr?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=B8=80=E5=90=8C=E5=85=B3=E9=97=AD,?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E8=AF=B7=E6=B1=82=E4=B8=8Bissue=E5=85=B3?= =?UTF-8?q?=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/projects/branches_controller.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index bd219c23a..c0a8ade3b 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -22,7 +22,13 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController open_pull_requests = @project.pull_requests.opening.where(head: params[:name]).where(user_id: current_user.id) if open_pull_requests.present? open_pull_requests.each do |pull_request| - PullRequests::CloseService.call(@project.owner, @project.repository, pull_request, current_user) + closed = PullRequests::CloseService.call(@project.owner, @project.repository, pull_request, current_user) + if closed === true + pull_request.project_trends.create!(user: current_user, project: @project,action_type: ProjectTrend::CLOSE) + # 合并请求下issue处理为关闭 + pull_request.issue&.update_attributes!({status_id:5}) + SendTemplateMessageJob.perform_later('PullRequestClosed', current_user.id, pull_request.id) if Site.has_notice_menu? + end end end return render_ok From 9db60413d9b89f9c9e97eedec0b64ca4be1cc2b7 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 30 Aug 2023 15:39:32 +0800 Subject: [PATCH 07/10] =?UTF-8?q?fixed=20=E5=88=86=E6=94=AF=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=B6=E6=9C=89=E5=BC=80=E5=90=AF=E7=9A=84pr?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=B8=80=E5=90=8C=E5=85=B3=E9=97=AD,?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/v1/projects/branches_controller.rb | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index c0a8ade3b..a4794b61a 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -19,18 +19,14 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController @result_object = Api::V1::Projects::Branches::DeleteService.call(@project, params[:name], current_user&.gitea_token) if @result_object # 有开启的pr需要一同关闭 - open_pull_requests = @project.pull_requests.opening.where(head: params[:name]).where(user_id: current_user.id) - if open_pull_requests.present? - open_pull_requests.each do |pull_request| - closed = PullRequests::CloseService.call(@project.owner, @project.repository, pull_request, current_user) - if closed === true - pull_request.project_trends.create!(user: current_user, project: @project,action_type: ProjectTrend::CLOSE) - # 合并请求下issue处理为关闭 - pull_request.issue&.update_attributes!({status_id:5}) - SendTemplateMessageJob.perform_later('PullRequestClosed', current_user.id, pull_request.id) if Site.has_notice_menu? - end - end + # 1、删除本仓库中存在未关闭的pr,即本仓库分支1->分支2 + # 2、如果是fork仓库,考虑删除主仓库中存在未关闭的pr,即本仓库:分支1->主:分支2,同时分两种删除:1删除本仓库分支1,2删除主仓库分支2 + close_pull_requests_by(@project, params[:name]) + if @project.forked_from_project_id.present? + # fork项目中删除分支 + close_pull_requests_by(@project.fork_project, params[:name]) end + return render_ok else return render_error('删除分支失败!') @@ -52,4 +48,19 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController def branch_params params.require(:branch).permit(:new_branch_name, :old_branch_name) end + + def close_pull_requests_by(project, branch_name) + open_pull_requests = project.pull_requests.opening.where(head: branch_name).or(a.pull_requests.opening.where(base: branch_name)) + if open_pull_requests.present? + open_pull_requests.each do |pull_request| + closed = PullRequests::CloseService.call(project.owner, project.repository, pull_request, current_user) + if closed === true + pull_request.project_trends.create!(user: current_user, project: project,action_type: ProjectTrend::CLOSE) + # 合并请求下issue处理为关闭 + pull_request.issue&.update_attributes!({status_id:5}) + SendTemplateMessageJob.perform_later('PullRequestClosed', current_user.id, pull_request.id) if Site.has_notice_menu? + end + end + end + end end \ No newline at end of file From 300dffd2a1bc9b47aa541ce1dbaa4feb2df99371 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 30 Aug 2023 15:43:51 +0800 Subject: [PATCH 08/10] =?UTF-8?q?fixed=20=E5=88=86=E6=94=AF=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=B6=E6=9C=89=E5=BC=80=E5=90=AF=E7=9A=84pr?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=B8=80=E5=90=8C=E5=85=B3=E9=97=AD,?= =?UTF-8?q?=E6=95=B4=E7=90=86fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/projects/branches_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index a4794b61a..40f44fea5 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -50,7 +50,7 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController end def close_pull_requests_by(project, branch_name) - open_pull_requests = project.pull_requests.opening.where(head: branch_name).or(a.pull_requests.opening.where(base: branch_name)) + open_pull_requests = project.pull_requests.opening.where(head: branch_name).or(project.pull_requests.opening.where(base: branch_name)) if open_pull_requests.present? open_pull_requests.each do |pull_request| closed = PullRequests::CloseService.call(project.owner, project.repository, pull_request, current_user) From 74c42f679a6ebabf4af49232b14503996500cbc6 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 30 Aug 2023 15:56:48 +0800 Subject: [PATCH 09/10] =?UTF-8?q?fixed=20=E5=86=8C=E9=99=A4=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/interactors/gitea/delete_file_interactor.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/interactors/gitea/delete_file_interactor.rb b/app/interactors/gitea/delete_file_interactor.rb index 103df6cd4..68c22f555 100644 --- a/app/interactors/gitea/delete_file_interactor.rb +++ b/app/interactors/gitea/delete_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.error("Gitea::Repository::Entries::DeleteService error======#{response.body}") + @error = "册除失败" end end From 743c63a7966a82b99d6ff1bc72fc6aa39fa1ef4e Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 30 Aug 2023 16:09:28 +0800 Subject: [PATCH 10/10] =?UTF-8?q?fixed=20=E6=96=87=E4=BB=B6=E6=97=A0?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8F=90=E7=A4=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/interactors/gitea/delete_file_interactor.rb | 4 ++-- app/interactors/gitea/update_file_interactor.rb | 4 ++-- app/services/gitea/repository/entries/create_service.rb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/interactors/gitea/delete_file_interactor.rb b/app/interactors/gitea/delete_file_interactor.rb index 68c22f555..03ddf4230 100644 --- a/app/interactors/gitea/delete_file_interactor.rb +++ b/app/interactors/gitea/delete_file_interactor.rb @@ -43,8 +43,8 @@ module Gitea if response.status == 200 @result = JSON.parse(response.body) else - Rails.logger.error("Gitea::Repository::Entries::DeleteService error======#{response.body}") - @error = "册除失败" + Rails.logger.error("Gitea::Repository::Entries::DeleteService error[#{response.status}]======#{response.body}") + @error = "删除失败,请确认该分支是否是保护分支。" end end diff --git a/app/interactors/gitea/update_file_interactor.rb b/app/interactors/gitea/update_file_interactor.rb index 0487a1ea0..1b729e2c8 100644 --- a/app/interactors/gitea/update_file_interactor.rb +++ b/app/interactors/gitea/update_file_interactor.rb @@ -43,8 +43,8 @@ module Gitea if response.status == 200 @result = JSON.parse(response.body) else - Rails.logger.info("Gitea::Repository::Entries::UpdateService error======#{response.body}") - @error = "更新失败" + Rails.logger.error("Gitea::Repository::Entries::UpdateService error[#{response.status}]======#{response.body}") + @error = "更新失败,请确认该分支是否是保护分支。" end end diff --git a/app/services/gitea/repository/entries/create_service.rb b/app/services/gitea/repository/entries/create_service.rb index e10dcadc6..ac27b3afb 100644 --- a/app/services/gitea/repository/entries/create_service.rb +++ b/app/services/gitea/repository/entries/create_service.rb @@ -53,7 +53,7 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService def status_payload(status, body) case status when 201 then success(json_parse!(body)) - when 403 then error("你没有权限操作!") + when 403 then error("你没有权限操作,请确认该分支是否是保护分支。") when 404 then error("你操作的链接不存在!") when 422 if @body[:new_branch].present? && (@body[:new_branch].include?('/') || @body[:new_branch].include?('\'') || @body[:new_branch].include?('^') || @body[:new_branch].include?('*'))