diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-20 12:09:13 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-20 12:09:13 +0300 |
commit | 1ac794623a8be5dee111716a44dd04ff708f3541 (patch) | |
tree | 6c18f9fbe0bd9978bd3e8d9b083d3a0ca180686e /app/services/projects | |
parent | 5247fe0bef72fa922841a79d5dbefb47d95112fa (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/projects')
-rw-r--r-- | app/services/projects/fork_service.rb | 49 |
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 |