diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-11-11 10:33:16 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-11-11 10:33:16 +0100 |
commit | ec0daedbc45104324387804ef7c3c9337fde1fda (patch) | |
tree | 42a1c242bff666b3b48cb6e3517715a7d54e4e29 | |
parent | be3d74e096f6b5cb46b5d2440c16383633f1fc06 (diff) | |
download | gitlab-ce-ec0daedbc45104324387804ef7c3c9337fde1fda.tar.gz |
Add service that runs after branch removed hooks
-rw-r--r-- | app/services/after_branch_delete_service.rb | 23 | ||||
-rw-r--r-- | app/services/delete_branch_service.rb | 9 | ||||
-rw-r--r-- | app/services/git_push_service.rb | 19 |
3 files changed, 45 insertions, 6 deletions
diff --git a/app/services/after_branch_delete_service.rb b/app/services/after_branch_delete_service.rb new file mode 100644 index 00000000000..c157cb68715 --- /dev/null +++ b/app/services/after_branch_delete_service.rb @@ -0,0 +1,23 @@ +require_relative 'base_service' + +## +# Branch can be deleted either by DeleteBranchService +# or by GitPushService. +# +class AfterBranchDeleteService < BaseService + attr_reader :branch_name + + def execute(branch_name) + @branch_name = branch_name + + stop_environments + end + + private + + def stop_environments + Ci::StopEnvironmentService + .new(project, current_user) + .execute(branch_name) + end +end diff --git a/app/services/delete_branch_service.rb b/app/services/delete_branch_service.rb index 3e5dd4ebb86..a9fe8198172 100644 --- a/app/services/delete_branch_service.rb +++ b/app/services/delete_branch_service.rb @@ -22,6 +22,7 @@ class DeleteBranchService < BaseService end if repository.rm_branch(current_user, branch_name) + execute_after_branch_delete_hooks(branch_name) success('Branch was removed') else error('Failed to remove branch') @@ -47,4 +48,12 @@ class DeleteBranchService < BaseService "#{Gitlab::Git::BRANCH_REF_PREFIX}#{branch.name}", []) end + + private + + def execute_after_branch_delete_hooks(branch_name) + AfterBranchDeleteService + .new(project, current_user) + .execute(branch_name) + end end diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index de313095bed..77c6c81cc1b 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -49,10 +49,7 @@ class GitPushService < BaseService update_gitattributes if is_default_branch? end - # Update merge requests that may be affected by this push. A new branch - # could cause the last commit of a merge request to change. - update_merge_requests - + execute_related_hooks perform_housekeeping end @@ -62,14 +59,24 @@ class GitPushService < BaseService protected - def update_merge_requests - UpdateMergeRequestsWorker.perform_async(@project.id, current_user.id, params[:oldrev], params[:newrev], params[:ref]) + def execute_related_hooks + # Update merge requests that may be affected by this push. A new branch + # could cause the last commit of a merge request to change. + # + UpdateMergeRequestsWorker + .perform_async(@project.id, current_user.id, params[:oldrev], params[:newrev], params[:ref]) EventCreateService.new.push(@project, current_user, build_push_data) @project.execute_hooks(build_push_data.dup, :push_hooks) @project.execute_services(build_push_data.dup, :push_hooks) Ci::CreatePipelineService.new(@project, current_user, build_push_data).execute ProjectCacheWorker.perform_async(@project.id) + + if push_remove_branch? + AfterBranchDeleteService + .new(project, current_user) + .execute(branch_name) + end end def perform_housekeeping |