diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index b38cde6a3..0842d2e67 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -2,42 +2,21 @@ class ForksController < ApplicationController before_action :require_login before_action :require_profile_completed, only: [:create] before_action :load_project - before_action :authenticate_user! - before_action :authenticate_project!, only: [:create] - - def fork_list - @user = current_user - @organizations = current_user.organizations - - end + before_action :authenticate_project!, :authenticate_user! def create - 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 + @new_project = Projects::ForkServiceProjects::ForkService.new(current_user, @project, params[:organization]).call end private def authenticate_project! - 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) - return render_result(-1, "fork失败,组织已拥有了这个项目") if @organization && Project.exists?(user_id: [@organization.id], identifier: (params[:new_identifier] || @project.identifier)) - return render_result(-1, "fork失败,请联系系统管理员") if gitea_check_exit(@organization) - else - return render_result(-1, "fork失败,您已fork过了这个项目") if Project.exists?(user_id: current_user.id, forked_from_project_id: @project.id) - return render_result(-2, "fork失败, fork本人项目需要为fork仓库重命名") if Project.exists?(user_id: current_user.id, identifier: (params[:new_identifier] || @project.identifier)) - return render_result(-1, "fork失败,请联系系统管理员") if gitea_check_exit(current_user) + if current_user&.id == @project.user_id + render_result(-1, "自己不能fork自己的项目") + elsif Project.exists?(user_id: current_user.id, identifier: @project.identifier) + render_result(0, "fork失败,你已拥有了这个项目") end - + # return if current_user != @project.owner + # render_result(-1, "自己不能fork自己的项目") end def authenticate_user! @@ -45,9 +24,4 @@ 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 +end \ No newline at end of file diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index a46b8d86a..37edf56ee 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -18,7 +18,6 @@ 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 deleted file mode 100644 index 39c0d2ae1..000000000 --- a/app/views/forks/fork_list.json.jbuilder +++ /dev/null @@ -1,17 +0,0 @@ -json.user do - json.id @user.id - json.type @user.type - json.name @user.real_name - json.login @user.login - json.mail @user.mail - 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 8750508ea..0d04c498a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -625,11 +625,7 @@ Rails.application.routes.draw do end resources :hooks - resources :forks, only: [:create] do - collection do - get :fork_list - end - end + resources :forks, only: [:create] 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]