diff options
author | Douwe Maan <douwe@gitlab.com> | 2017-04-19 22:12:27 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2017-04-19 22:12:27 +0000 |
commit | 3fecb4bee9702fba90f94a66e427b98f64cfe6bf (patch) | |
tree | 18c1c59da34abb0e4fb6796565259c6d60286f67 /app | |
parent | b638e45c6b6c425deade63f0e15b320e56475890 (diff) | |
parent | 11fd2f80b0500736a9df0befbd371bfec9549138 (diff) | |
download | gitlab-ce-3fecb4bee9702fba90f94a66e427b98f64cfe6bf.tar.gz |
Merge branch 'sh-issue-29247-fix' into 'master'
Don't delete a branch involved in an open merge request in "Delete all merged branches" service
Closes #29427
See merge request !10727
Diffstat (limited to 'app')
-rw-r--r-- | app/services/delete_merged_branches_service.rb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/app/services/delete_merged_branches_service.rb b/app/services/delete_merged_branches_service.rb index 1b5623baebe..3b611588466 100644 --- a/app/services/delete_merged_branches_service.rb +++ b/app/services/delete_merged_branches_service.rb @@ -8,9 +8,20 @@ class DeleteMergedBranchesService < BaseService branches = project.repository.branch_names branches = branches.select { |branch| project.repository.merged_to_root_ref?(branch) } + # Prevent deletion of branches relevant to open merge requests + branches -= merge_request_branch_names branches.each do |branch| DeleteBranchService.new(project, current_user).execute(branch) end end + + private + + def merge_request_branch_names + # reorder(nil) is necessary for SELECT DISTINCT because default scope adds an ORDER BY + source_names = project.origin_merge_requests.opened.reorder(nil).uniq.pluck(:source_branch) + target_names = project.merge_requests.opened.reorder(nil).uniq.pluck(:target_branch) + (source_names + target_names).uniq + end end |