Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-20 12:09:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-20 12:09:13 +0300
commit1ac794623a8be5dee111716a44dd04ff708f3541 (patch)
tree6c18f9fbe0bd9978bd3e8d9b083d3a0ca180686e /app/services/projects
parent5247fe0bef72fa922841a79d5dbefb47d95112fa (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/projects')
-rw-r--r--app/services/projects/fork_service.rb49
1 files changed, 29 insertions, 20 deletions
diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb
index fcfea567885..6ac53b15ef9 100644
--- a/app/services/projects/fork_service.rb
+++ b/app/services/projects/fork_service.rb
@@ -3,24 +3,25 @@
module Projects
class ForkService < BaseService
def execute(fork_to_project = nil)
- forked_project =
- if fork_to_project
- link_existing_project(fork_to_project)
- else
- fork_new_project
- end
+ forked_project = fork_to_project ? link_existing_project(fork_to_project) : fork_new_project
refresh_forks_count if forked_project&.saved?
forked_project
end
- private
+ def valid_fork_targets
+ @valid_fork_targets ||= ForkTargetsFinder.new(@project, current_user).execute
+ end
- def allowed_fork?
- current_user.can?(:fork_project, @project)
+ def valid_fork_target?
+ return true if current_user.admin?
+
+ valid_fork_targets.include?(target_namespace)
end
+ private
+
def link_existing_project(fork_to_project)
return if fork_to_project.forked?
@@ -30,6 +31,21 @@ module Projects
end
def fork_new_project
+ new_project = CreateService.new(current_user, new_fork_params).execute
+ return new_project unless new_project.persisted?
+
+ # Set the forked_from_project relation after saving to avoid having to
+ # reload the project to reset the association information and cause an
+ # extra query.
+ new_project.forked_from_project = @project
+
+ builds_access_level = @project.project_feature.builds_access_level
+ new_project.project_feature.update(builds_access_level: builds_access_level)
+
+ new_project
+ end
+
+ def new_fork_params
new_params = {
visibility_level: allowed_visibility_level,
description: @project.description,
@@ -57,18 +73,11 @@ module Projects
new_params.merge!(@project.object_pool_params)
- new_project = CreateService.new(current_user, new_params).execute
- return new_project unless new_project.persisted?
-
- # Set the forked_from_project relation after saving to avoid having to
- # reload the project to reset the association information and cause an
- # extra query.
- new_project.forked_from_project = @project
-
- builds_access_level = @project.project_feature.builds_access_level
- new_project.project_feature.update(builds_access_level: builds_access_level)
+ new_params
+ end
- new_project
+ def allowed_fork?
+ current_user.can?(:fork_project, @project)
end
def fork_network