diff options
author | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-11-03 11:31:29 +0100 |
---|---|---|
committer | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-11-03 12:17:59 +0100 |
commit | 7582bc8b4eacfe70ecc575f724285de471d6c743 (patch) | |
tree | 29be30bb251c7925a8a5c81e51e8b3bff904aaa0 /app/services/projects/unlink_fork_service.rb | |
parent | 39d00bddc494c7f13527887e005b53431642d24c (diff) | |
download | gitlab-ce-7582bc8b4eacfe70ecc575f724285de471d6c743.tar.gz |
Unlink a project from a fork network when it's source was deleted.
We need to close all merge requests coming from the project within the
entire fork network.
Diffstat (limited to 'app/services/projects/unlink_fork_service.rb')
-rw-r--r-- | app/services/projects/unlink_fork_service.rb | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/app/services/projects/unlink_fork_service.rb b/app/services/projects/unlink_fork_service.rb index 2b82e5732e4..c499f384426 100644 --- a/app/services/projects/unlink_fork_service.rb +++ b/app/services/projects/unlink_fork_service.rb @@ -3,18 +3,24 @@ module Projects def execute return unless @project.forked? - @project.forked_from_project.lfs_objects.find_each do |lfs_object| - lfs_object.projects << @project + if fork_source = @project.fork_source + fork_source.lfs_objects.find_each do |lfs_object| + lfs_object.projects << @project + end + + refresh_forks_count(fork_source) end - merge_requests = @project.forked_from_project.merge_requests.opened.from_project(@project) + merge_requests = @project.fork_network + .merge_requests + .opened + .where.not(target_project: @project) + .from_project(@project) merge_requests.each do |mr| ::MergeRequests::CloseService.new(@project, @current_user).execute(mr) end - refresh_forks_count(@project.forked_from_project) - @project.fork_network_member.destroy @project.forked_project_link.destroy end |